我的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 - d
与x
保持同步,则不执行任何操作。
答案 0 :(得分:1)
如果您的目标都共享一个共同的词干,那么您可以使用模式规则:
%.a %.b %.c %.d:
touch $*.a $*.b $*.c $*.d
如果他们不这样做,那么你唯一能做的就是创建一个标记文件:
a b c d: .sentinel ;
.sentinel: ; touch a b c d $@