我想知道跨目标使用评估时是否存在任何潜在的比赛条件。例如,如果我有:
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
对于同一个目标,X
和Y
是否被保证为相同的值,或者目标扩展的一个实例在扩展时可能会在另一个实例上cri草?
(背景-我正在调试某些makefile上不一致的make bug,这些bug使用eval在多个目标之间设置一些公共变量,我想知道这是否可能是一个促成因素)
答案 0 :(得分:1)
make -j
在单独的进程中运行每个作业。变量更改不会在制作流程之间转移。