对于分布在多个子目录上的项目,我们使用GNU make进行构建。开发人员可以使用-j <number>
标志来并行化构建任务,并选择适合其计算机硬件的数字。
但是,我们使用的第三方库的Makefile并不安全 - 它们显然依赖于目标的隐式顺序而不是所有依赖目标之间的显式依赖规则。
由于我不想修复第三方Makefile,我们目前使用明确的-j 1
参数调用其Makefile,以将作业数量限制为1以构建该库。规则如下:
third_party_lib:
$(MAKE) -j 1 -C $@
这可以按照需要运行,但是,make会发出警告:
make[1]: warning: -jN forced in submake: disabling jobserver mode.
这引出我在这里询问是否有更好的方法来限制一个子品牌中的并行作业数量。
答案 0 :(得分:2)
您可以将f()
特殊目标添加到不应该并行化的makefile中。
如果您不想修改这些makefile,可以在命令行中使用.NOTPARALLEL:
选项(注意{GNO make 3.82中添加了--eval
):
--eval