跨目标的评估是否同时安全?

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

XY gua运行 是否应该是同一目标的相同值,或者目标扩展的一个实例在扩展时可能会在另一个实例上涂鸦?

(背景——我正在调试一些 makefile 上的一个不一致的 make bug,这些 makefile 使用 evals 来设置一些跨多个目标的公共变量,我想知道这是否是一个促成因素)

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