【问题标题】:make: disable parallel building in subdirectory for single target onlymake: 仅针对单个目标禁用子目录中的并行构建
【发布时间】:2013-06-14 20:53:09
【问题描述】:

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

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

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

【问题讨论】:

  • 我能想到的唯一技巧是为串行检查插入一个错误的依赖项。手册中有basic idea
  • 为什么不通过让目标相互依赖来解决这个问题?

标签: build makefile autotools


【解决方案1】:

添加到您的Makefile

.NOTPARALLEL:

参见 GNU make here 的文档。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我会在找到几分钟后尝试。
    • 这不起作用:这给了我警告:-jN 在 submake 中强制
    • 绝对有效。是的,您会收到警告。但它不会并行运行作业。如果您始终希望该 makefile 的每次调用都不是并行运行(而不仅仅是调用特定目标的特定调用),那么使用 NOTPARALLEL 会更干净,并且您可以更改 makefile。如果其中一项或两项都不正确,则 NOTPARALLEL 的帮助较小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多