【问题标题】:makefile: how to compile fastmakefile:如何快速编译
【发布时间】:2012-04-05 12:46:56
【问题描述】:

我正在使用 GCC 4.7 并编译我的 C++ 代码项目。代码由分布在目录中的文件组成。

在我使用的 RHEL 服务器上,有 16 个内核,但编译速度仍然很慢。您能否建议 makefile 的可能替代方案或选项,这可能有助于快速编译。我试过 -j 但它只编译一些文件夹并停止;不编译主二进制文件。

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: compilation makefile


    【解决方案1】:

    如果您使用-j 编译时您的makefile 失败,但不使用它也可以正常工作,那么您可能需要修复您的makefile 以在并行编译中正常工作。否则,其他 15 个核心对你没有用处。

    对于经验不足的 makefile 编写者来说,编写类似以下内容的情况并不少见:

    final: step1 step2 step3
    

    意思是“构建最终,首先构建步骤1,然后步骤2,然后步骤3”。当您使用-j 1 的默认设置运行时,这可以正常工作,因为make 碰巧以从左到右的顺序构建每个依赖项。但是如果你使用-j 20(比如),那么它将尝试并行构建它们。它将尝试立即开始构建所有 3 个步骤,而无需先等待每个后续步骤完成。

    正确的写法是:

    final: step3
    step3: step2
    step2: step1
    

    这告诉make到底发生了什么:要构建final,您首先需要构建step3,为此您需要step2,为此您需要step1

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2014-06-10
      • 2010-11-03
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      相关资源
      最近更新 更多