跨目标的评估是否同时安全?
Are evals concurrently safe across targets?
我想知道在跨目标使用 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
X
和 Y
gua运行 是否应该是同一目标的相同值,或者目标扩展的一个实例在扩展时可能会在另一个实例上涂鸦?
(背景——我正在调试一些 makefile 上的一个不一致的 make bug,这些 makefile 使用 evals 来设置一些跨多个目标的公共变量,我想知道这是否是一个促成因素)
make -j
在单独的进程中运行每个作业。变量更改不会在 make 进程之间传输。
我想知道在跨目标使用 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
X
和 Y
gua运行 是否应该是同一目标的相同值,或者目标扩展的一个实例在扩展时可能会在另一个实例上涂鸦?
(背景——我正在调试一些 makefile 上的一个不一致的 make bug,这些 makefile 使用 evals 来设置一些跨多个目标的公共变量,我想知道这是否是一个促成因素)
make -j
在单独的进程中运行每个作业。变量更改不会在 make 进程之间传输。