并行GNU make和一次创建多个目标的规则

时间:2013-06-20 14:18:01

标签: parallel-processing makefile gnu-make

我的GNU makefile(以及其他)格式的几个规则

a b c d: x
        program $^

即。 program只需一次调用即可创建文件a,b,c和d。 当我使用gmake -j 4运行时, make 并行生成四个program运行,因为没有文件存在且没有一个依赖于另一个。

我可以通过提供“假依赖链”(缺少更好的术语)来解决这个问题:

a: x
        program $^
b: a
c: b
d: c

是否有一种更优雅的方式来教gmake只运行program一次,即使在并行构建中也是如此?

编辑:任何解决方案都应遵守对x的依赖,如果a - dx保持同步,则不执行任何操作。

1 个答案:

答案 0 :(得分:1)

如果您的目标都共享一个共同的词干,那么您可以使用模式规则:

%.a %.b %.c %.d:
        touch $*.a $*.b $*.c $*.d

如果他们不这样做,那么你唯一能做的就是创建一个标记文件:

a b c d: .sentinel ;
.sentinel: ; touch a b c d $@