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