1

对于分布在多个子目录中的项目,我们使用 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.

这导致我在这里询问是否有更好的方法来限制一个子制作中的并行作业数量。

4

1 回答 1

2

您可以将.NOTPARALLEL:特殊目标添加到不应并行化的生成文件中。

如果您不想修改这些 makefile,可以使用--eval命令行上的选项(注意--eval在 GNU make 3.82 中添加):

third_party_lib:
        $(MAKE) --eval .NOTPARALLEL: -C $@
于 2017-06-10T12:41:30.613 回答