make:仅在单个目标的子目录中禁用并行构建

arn*_*rne 9 makefile build autotools

我有一个相当庞大的autotools驱动的项目,它位于一个目录树中,该目录树由许多带有子目录的目录组成.它有一个目标check(在每个子目录和主目录中)执行大量自动化测试.该check目标是递归构建.

并行构建和测试(通过-jmake选项)适用于大多数目录.但是有一个目录包含并行执行时不起作用的测试(定时灵敏度),但是在串行运行时通过.

问题是:有没有办法强制make check在这一个子目录中串行构建目标,同时并行构建其他所有子目录?

Ant*_*ama 16

添加到您的Makefile:

.NOTPARALLEL:

见GNU的文档,使这里.


Mad*_*ist 5

如果我理解正确,那么当您运行构建check目标的递归 make 时,您可以-j1专门传递,以确保它串行运行:

check: ; $(MAKE) -j1 ...
Run Code Online (Sandbox Code Playgroud)

  • 它确实有效。是的,您会收到警告。但它不会并行运行作业。如果您始终希望该 makefile 的每次调用都不是并行运行(而不仅仅是调用特定目标的特定调用),则使用 NOTPARALLEL 会更干净,并且您可以更改 makefile。如果其中一项或两项都不成立,则 NOTPARALLEL 的帮助就较小。 (4认同)