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”参数使用多个作业时防止构建失败的主要内容,如果未能解决你的问题,请参考以下文章

Makefile使用总结

如何提高linux makefile的编译速度

转载-------makefile 使用总结

Makefile 使用总结

一点一点学写Makefile - 编译时指定宏参数

Makefile 使用总结转