Makefile 项目 - 通过“-j”参数使用多个作业时防止构建失败
Posted
技术标签:
【中文标题】Makefile 项目 - 通过“-j”参数使用多个作业时防止构建失败【英文标题】:Makefile project - Preventing build failure when using multiple jobs via "-j" argument 【发布时间】:2015-08-15 21:39:13 【问题描述】:我有许多简单的 C++ Makefile 项目,它们使用我手动编写的 GNU Make 风格的 makefile,而不是使用 Automake 或 CMake。其中最复杂的机制是使用pkginfo
来获取编译时标志并包含少数第三方库的路径。
我可以通过运行 make 来大大加快我在当前硬件(Intel i7 四核)上的构建速度,因此,假设机器上有 4 个内核:
make -j5 -l4
但是,当我允许多个作业时,一些在串行运行时构建良好的项目(即:j1)会失败。这些失败的项目本质上是一组从“主”makefile按顺序构建的项目,并且某些依赖项是无序构建的。
假设我有一个这样的项目列表:
library1 (all other projects depend on this)
library2 (all other projects depend on this)
library3 (some other projects depend on this)
example1
...
example20
是否有一种简单/事实上的“标准”方式来放置标记/规则,以便主 makefile 首先串行构建库,然后允许其余示例项目以任何顺序构建?
谢谢。
【问题讨论】:
您是否将目标文件(*.o)的依赖项放入 make 文件中?您可以将您的 Makefile 作为您问题的一部分发布吗? 你的规则应该是你的依赖——这就是整个想法。 【参考方案1】:可能我没看懂,但是为什么不人为的在主makefile中声明library 2依赖library 1,library 3依赖library 1和2等等。那应该只有他们才有可能串行构建。
不知道有没有专门的makefile语言或者这个选项,很想学。
【讨论】:
以上是关于Makefile 项目 - 通过“-j”参数使用多个作业时防止构建失败的主要内容,如果未能解决你的问题,请参考以下文章