对于分布在多个子目录中的项目,我们使用 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.
这导致我在这里询问是否有更好的方法来限制一个子制作中的并行作业数量。