在Makefile中,我正在尝试将shell命令的结果分配给变量:
TMP=`mktemp -d /tmp/.XXXXX`
all:
echo $(TMP)
echo $(TMP)
但
$ make Makefile all
回显2个不同的值,例如:
/tmp/.gLpm1T
/tmp/.aR4cDi
对变量赋值计算mktemp的语法是什么?
谢谢。
答案 0 :(得分:32)
这取决于制作的味道。使用GNU Make,您可以使用:=
代替{/ 1}},而不是
=
修改正如Novelocrat所指出的,TMP:=$(shell mktemp -d /tmp/.XXXXX)
分配与=
分配的不同之处在于,在替换期间将评估使用:=
分配的值(因此,每次使用变量),而=
分配的变量的值只评估一次(在赋值期间),因此,值之后固定。有关更详细的说明,请参阅GNU Make的documentation。
为了使赋值之后的值真正保持不变,它不应该包含任何部分,这可能是shell特有的(:=
调用以实际运行更新规则等。 )特别是,最好避免使用反引号。相反,使用GNU make
的内置shell函数和类似的来实现你的目标。
答案 1 :(得分:8)
如果您使用的是GNU Make,而不是使用反引号,请使用$(shell ...)
。例如,
TMP=$(shell mktemp -d /tmp/.XXXXX)