3

我有一个简单的示例 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 在构建公共依赖项时会正确同步吗?

4

1 回答 1

5

是的,GNU make 的并行化支持正确地处理了这个问题(如果没有,它不会很有用!)一般来说,如果你的 makefile 环境完全正确地声明了你的依赖关系图,那么 make 将始终正确地构建它而不管并行作业的数量。

诀窍在于,对于某些复杂的环境,可能很难完全正确地声明依赖图。但是对于像上面这样的简单情况,没有问题。

于 2013-07-10T19:20:52.273 回答