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

Build make:仅对单个目标禁用子目录中的并行构建,build,makefile,autotools,Build,Makefile,Autotools,我有一个很大的autotools驱动的项目,它位于一个目录树中,由许多带有子目录的目录组成。它有一个目标检查(在每个子目录以及主目录中),它执行大量的自动化测试。检查目标是递归构建的 并行构建和测试(通过-j选项生成)适用于大多数目录。然而,有一个目录包含的测试在并行执行时不起作用(时间敏感性),但在串行运行时通过 问题是:有没有一种方法可以强制make在并行构建其他所有内容的同时,在这一个子目录中串行构建检查目标?如果我理解正确,那么当您运行构建检查目标的递归make时,您只需传递-j1,要确

我有一个很大的autotools驱动的项目,它位于一个目录树中,由许多带有子目录的目录组成。它有一个目标
检查
(在每个子目录以及主目录中),它执行大量的自动化测试。
检查
目标是递归构建的

并行构建和测试(通过
-j
选项生成)适用于大多数目录。然而,有一个目录包含的测试在并行执行时不起作用(时间敏感性),但在串行运行时通过


问题是:有没有一种方法可以强制make在并行构建其他所有内容的同时,在这一个子目录中串行构建
检查
目标?

如果我理解正确,那么当您运行构建
检查
目标的递归make时,您只需传递
-j1
,要确保它连续运行,请执行以下操作:

check: ; $(MAKE) -j1 ...

添加到您的
Makefile

.NOTPARALLEL:


请参阅GNU make的文档。

我会在几分钟后尝试。这不起作用:这给了我警告:-jN强制进入Submarkit绝对起作用。是的,你会得到警告。但它不会并行运行作业。如果您总是希望该makefile的每次调用都不是并行运行(而不仅仅是调用特定目标的特定调用),那么使用NOTPARALLEL会更干净,并且您可以更改该makefile。如果其中一个或两个都不正确,那么NOTPALLEL就没那么有用了。我能想到的唯一技巧就是为串行检查插入一个错误的依赖项。手册中有一个问题。为什么不通过使目标相互依赖来解决这个问题呢?