Makefile:为什么命令替换不能在$(shell)函数中起作用?

时间:2016-06-06 04:59:48

标签: makefile

我在Makefile中有一个变量:

JAVABIN = $(shell dirname $(which java))

当我回复JAVA_HOME中的Makefile变量时,变量定义会抱怨:

dirname: missing operand
Try 'dirname --help' for more information.

当我引用$(which java)时,JAVABIN.,结果是错误的。我不明白 make 如何读取Makefile,也许是原因。非常感谢你。

1 个答案:

答案 0 :(得分:8)

你需要逃避美元:

JAVABIN = $(shell dirname $$(which java))

请参阅6.1 Basics of Variable References

您收到的具体错误消息是由于$(which java)部分扩展为空字符串,因为它是一个未定义的变量。因此,dirname系统命令最终看不到任何参数,在这种情况下,它会抱怨"缺少操作数"。