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

时间:2018-11-26 21:28:48

标签: makefile

我正在尝试制定一条规则,如果VARENDS_WITH结尾,那么它将执行X,否则它将发生Y。现在,我可以通过以下方法实现 kinda

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,否则它将具有奇怪的行为。 (还可以算是个hack)

实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用此:

$(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