在构建具有共同依赖关系的目标时,GNU是否会受到竞争条件的影响?

时间:2013-07-10 19:13:52

标签: makefile race-condition gnu-make

我有一个简单的示例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,因此在进行并行构建时可能存在竞争条件(通常会生成两次)。

我确实制作了-j4并且没有经历两次常见的生成。我甚至在一代共同的睡眠陈述中使事情变得更具确定性。

那么说构建公共依赖项时GNU make是否可以正确同步呢?

1 个答案:

答案 0 :(得分:4)

是的,GNU make的并行化支持可以正确处理它(如果没有,它将不会非常有用!)通常, if 你的makefile环境完全正确地声明了你的依赖图,无论并行作业的数量如何,make都将始终正确构建它。

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