在Makefile中,我试图将shell命令的结果分配给变量:
TMP=`mktemp -d /tmp/.XXXXX`
all:
echo $(TMP)
echo $(TMP)
Run Code Online (Sandbox Code Playgroud)
但
$ make Makefile all
Run Code Online (Sandbox Code Playgroud)
回应2个不同的值,例如:
/tmp/.gLpm1T
/tmp/.aR4cDi
Run Code Online (Sandbox Code Playgroud)
在变量赋值上计算mktemp的语法是什么?
谢谢.
Dir*_*irk 32
这取决于制作的味道.随着GNU做,你可以使用:=,而不是=作为
TMP:=$(shell mktemp -d /tmp/.XXXXX)
Run Code Online (Sandbox Code Playgroud)
编辑正如所指出Novelocrat,所述=分配不同于:=在该分配值使用分配=替换期间将被评估(并且因此,每次,使用可变的),而:=分配变量将具有它们的值只计算一次(分配期间),因此,之后的数值是固定的.有关更详细的说明,请参阅GNU Make 的文档.
但是为了使值在赋值后真正保持不变,它不应该包含任何部分,这可能是shell特有的(make为了实际运行更新规则而调用,等等).特别是,最好避免使用反引号.相反,使用GNU make的内置shell功能和类似功能来实现你的目标.
如果您使用的是GNU Make,而不是使用反引号,请使用$(shell ...).例如,
TMP=$(shell mktemp -d /tmp/.XXXXX)
Run Code Online (Sandbox Code Playgroud)