我正在尝试制定一条规则,如果VAR
以ENDS_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)
实现这一目标的正确方法是什么?
答案 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