在赋值时计算Makefile变量

时间:2009-09-16 22:31:40

标签: makefile

在Makefile中,我正在尝试将shell命令的结果分配给变量:

TMP=`mktemp -d /tmp/.XXXXX`

all:
    echo $(TMP)
    echo $(TMP)

$ make Makefile all

回显2个不同的值,例如:

/tmp/.gLpm1T
/tmp/.aR4cDi

对变量赋值计算mktemp的语法是什么?

谢谢。

2 个答案:

答案 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)