评估在目标之间同时安全吗?

时间:2019-03-14 18:15:17

标签: makefile eval

我想知道跨目标使用评估时是否存在任何潜在的比赛条件。例如,如果我有:

all1:
    $(eval X:=1)
    $(eval Y:=1)
    @echo "[$@] X: $(X), Y: $(Y)"

all2:
    $(eval Y:=2);
    $(eval X:=2);
    @echo "[$@] X: $(X), Y: $(Y)"

然后运行

 make all all2 -j

对于同一个目标,XY是否被保证为相同的值,或者目标扩展的一个实例在扩展时可能会在另一个实例上cri草?

(背景-我正在调试某些makefile上不一致的make bug,这些bug使用eval在多个目标之间设置一些公共变量,我想知道这是否可能是一个促成因素)

1 个答案:

答案 0 :(得分:1)

make -j在单独的进程中运行每个作业。变量更改不会在制作流程之间转移。