目前我正在处理一个 makefile,如果该值存在于预定义列表中,我想根据事实执行一个函数。
test: VALUES=A B C
test:
$(eval FOUND=$(filter $(VALUE),$(VALUES)))
ifneq ($(FOUND),"")
$(call myFunction,arg1,arg2)
endif
# do other things...
调用make命令如下:
make VALUE=A test
但由于某种原因,call 函数从未被调用过。 我的猜测是 FOUND 值只有 shell 知道,但我不知道如何获得所需的结果。
我试过不使用 eval 函数,而是使用 bash 条件函数,但对于后者,我无法调用“call myFunction”,因为这只有 make 本身知道。
ifneq ($(FOUND),"")
在读取时执行,稍后执行规则的命令。所以它不起作用。
但是您可以构建一个条件命令(假定为 bash):
test:
# this example will not work because of bash + make script mismatch !!!
FOUND=$(filter $(VALUE),$(VALUES)); [[ $FOUND != "" ]] && \
myFunction arg1 arg2
问题是
myFunction
的调用,因为好像是make函数
您似乎在混合使用
make
和 shell 语法,并且一路上让自己非常困惑。
我猜你正在寻找类似的东西
VALUES=A B C
ifneq ("$(filter $(VALUE),$(VALUES))","")
call=$$(call myFunction,arg1,arg2)
else
call=# nothing
endif
test:
$(eval $(call))
在像这样的食谱中嵌入
make
函数是可疑的。除非您确切地知道自己在做什么,否则可能会限制自己使用食谱中的 shell 语法。