代码之家  ›  专栏  ›  技术社区  ›  Aaron N. Brock

Makefile:如果字符串以其他字符串结尾

  •  1
  • Aaron N. Brock  · 技术社区  · 6 年前

    VAR 以结束 ENDS_WITH 是的 X 否则它会 Y . 现在,我可以 通过以下方法实现:

    VAR := Hello, World
    
    ENDS_WITH := rld
    
    endswith:
    ifeq ($(findstring $(ENDS_WITH)potato,$(VAR)potato),)
        @echo "$(VAR) doesn't end with $(ENDS_WITH)"
        # Do X
    else
        @echo "$(VAR) ends with $(ENDS_WITH)"
        # Do Y
    endif
    

    但是,这假定两个字符串都不包含 potato

    实现这一目标的正确途径是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   MadScientist    6 年前

    您可以使用:

    $(patsubst %$(ENDS_WITH),,$(lastword $(VAR)))
    

    如果 VAR ENDS_WITH ,否则为非空字符串。我们必须使用 lastword 这里是因为 patsubst 每一个单词都是独立的,但我们只关心最后一个。

    endswith:
    ifeq ($(patsubst %$(ENDS_WITH),,$(lastword $(VAR))),)
            @echo "$(VAR) ends with $(ENDS_WITH)"
            # Do Y
    else
            @echo "$(VAR) doesn't end with $(ENDS_WITH)"
            # Do X
    endif