如何在运行时使用Makefile中Shell函数返回的值?

时间:2019-07-18 06:45:34

标签: makefile

我在我的Makefile中的多个地方使用了shell命令的结果。结果在Makefile加载时未知-需要每次计算。

我尝试了以下操作:

cmd = echo "string"

target:
    ls $(call cmd)

Instead of ls string, I get ls echo string.

2 个答案:

答案 0 :(得分:0)

我知道了。代替: cmd = echo "string" 我用了: cmd = $(shell echo "string")

答案 1 :(得分:0)

由于各种技术原因,您的解决方案并不正确,在这个琐碎的示例中可能无关紧要,但在其他情况下可能会遇到困难。

在食谱中使用shell始终是一种反模式。在某些情况下,它可能会产生一些非常奇怪的结果。您在上面所做的更改就可以做到这一点。

相反,您想使用Shell语法来运行命令并替换其输出:通过反引号或较新的$(...)语法。后者具有更好的嵌套功能,但在makefile配方中使用时有点烦人,因为它要求用美元符号引号。

您可以根据需要将其放在变量内或变量外。因此,这些解决方案之一更好:

cmd = `echo "string"`
target:
        ls $(call cmd)

cmd = $$(echo "string")
target:
        ls $(call cmd)

cmd = echo "string"
target:
        ls `$(call cmd)`

cmd = echo "string"
target:
        ls $$($(call cmd))

[*]每个规则总是有一个例外...:)