我在我的Makefile中的多个地方使用了shell命令的结果。结果在Makefile加载时未知-需要每次计算。
我尝试了以下操作:
cmd = echo "string"
target:
ls $(call cmd)
Instead of ls string, I get ls echo string.
答案 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))
[*]每个规则总是有一个例外...:)