Makefile根据变量值条件执行命令

问题描述 投票:0回答:2

目前我正在处理一个 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 本身知道。

bash makefile gnu-make
2个回答
0
投票

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函数


0
投票

您似乎在混合使用

make
和 shell 语法,并且一路上让自己非常困惑。

你正在寻找类似的东西

VALUES=A B C
ifneq ("$(filter $(VALUE),$(VALUES))","")
   call=$$(call myFunction,arg1,arg2)
else
   call=# nothing
endif
test:
    $(eval $(call))

在像这样的食谱中嵌入

make
函数是可疑的。除非您确切地知道自己在做什么,否则可能会限制自己使用食谱中的 shell 语法。

© www.soinside.com 2019 - 2024. All rights reserved.