我有一个简单的示例 makefile 可以显示我的问题:
.PHONY: a.out b.out
all: a.out b.out
common:
echo building common
sleep 1
touch common
a.out: common
echo building a.out
b.out: common
echo building b.out
a.out & b.out 依赖于 common,因此在进行并行构建时可能会出现竞争条件(common 生成两次)。
我确实制作了 -j4 并且没有遇到两次生成常见的情况。我什至在通用生成中放置了一个睡眠语句,以使事情更具确定性。
那么可以肯定地说 GNU make 在构建公共依赖项时会正确同步吗?