如何只用一个parralel作业递归运行?

时间:2017-02-08 11:31:40

标签: makefile

我有一个运行其他makefile的makefile。其中一个其他makefile是错误的,如果运行-j 2或更多,有时会失败。我怎样才能递归调用makefile,只允许它有一个作业,没有并行性?我通常使用-j 9运行我的外部makefile。

2 个答案:

答案 0 :(得分:2)

添加-j1以使命令行运行makefile肯定会有效。但是我建议以不同的方式解决问题。

问:谁是麻烦制造者?

答:规则中包含错误依赖关系的Makefile。

所以正确的解决方案是修复makefile。最简单的解决方法是添加特殊的.NOTPARALLEL目标。

GNU制作手册https://www.gnu.org/software/make/manual/html_node/Special-Targets.html

  

.NOTPARALLEL被提到作为目标,然后这个make的调用   即使给出了'-j'选项,也会连续运行。任何   递归调用make命令仍将并行运行配方   (除非它的makefile也包含这个目标)。任何先决条件   这个目标被忽略了。

所以只需添加

# TBD: This makefile is broken: it doesn't support -j make option.
.NOTPARALLEL:

麻烦makefile,不要触摸命令行运行它。这样做将是自我记录的解决方法。

答案 1 :(得分:0)

只需添加-j1这样的$(MAKE) -C ${PROJECT_BUILD_DIR} -j1 install选项即可。