Build 加快构建速度的技巧

Build 加快构建速度的技巧,build,makefile,gnu-make,Build,Makefile,Gnu Make,有没有办法加快软件构建/编译的速度?我们有一个构建树C,C++使用MaxFrm,它需要将近2HR用于新的构建。我遇到过几个商业解决方案,比如ElectricAccelerator、Sparkbuild,有没有开源软件?你可能想看看,当然还有,-j做个选择。在谷歌上搜索可能有助于获得开源软件列表。 W.r.t您的代码可以执行以下操作以减少构建时间: 尽可能使用转发声明 使用名称空间声明而不是名称空间指令 确保没有不必要的包含 一种方法是在更快的硬件上运行构建。我意识到这并不总是一种选择,但它还是

有没有办法加快软件构建/编译的速度?我们有一个构建树C,C++使用MaxFrm,它需要将近2HR用于新的构建。我遇到过几个商业解决方案,比如ElectricAccelerator、Sparkbuild,有没有开源软件?

你可能想看看,当然还有,
-j
做个选择。

在谷歌上搜索可能有助于获得开源软件列表。
W.r.t您的代码可以执行以下操作以减少构建时间:

  • 尽可能使用转发声明
  • 使用名称空间声明而不是名称空间指令
  • 确保没有不必要的包含

    • 一种方法是在更快的硬件上运行构建。我意识到这并不总是一种选择,但它还是值得考虑的。 正如@Martin提到的,一些要升级的特定子系统包括尽可能快地使用磁盘,如SSD,添加更多RAM、更快的CPU(以及更多内核,如果编译器可以使用它们的话),并确保生成的文件都是生成机的本地文件(不在网络上)


      您还应该为构建过程提供尽可能多的资源池,以便从构建机器中剥离所有与构建无关的过程和应用程序。这将减少任何资源争用。

      在我们公司,我们有许多产品具有更长的构建时间,如3-6小时

      我们使用了两种技术

    • 使用
      -j
      选项的
      make
    • 将RAM作为磁盘安装。然后将所有文件移到那里并编译。但是你需要足够的内存。我们使用了Amazons ec2实例。相当贵
      如果正确使用,预编译头可以大大减少构建时间。

      我们使用了
      distmake
      ccache
      和创建可并行生成文件的
      makefile生成器的组合<代码>C/C++
      构建可以非常好地并行化;通常所有
      .o
      文件都可以并行编译

      Distmake
      是make的分布式实现,基于gnumake,在GPL下发布。我维持它。它允许您跨多个主机进行并行化。这要求所有主机都具有相同的文件系统视图,例如NFS,以便可以在任何构建主机上运行相同的命令

      如果您有选择的话,关闭优化将倾向于生成更快的构建


      如果您已经使用了并行构建体系结构,但它仍然很慢,那么您可能只需要研究它。用秒表观察它的进展,看看它在哪里。寻找可能你没想到的“长杆”。祝您好运。

      您没有指定配置软件,但我们发现clearcase存在问题。由于它是如何逐个文件评估规则的,因此仅打开一个文件可能是一个瓶颈。如果你对CycCask“卡住”,就只能考虑进一步阅读。

      因此,我们发现,通过更改头文件的include-guard,您可以将构建时间缩短到时间的1/30(对我们来说确实如此)

      基本上,在头文件的顶部有一个include-guard,如:

      #ifndef FOO_H
      #define FOO_H
      your code
      #endif
      
      然后去别的地方,你包括foo.h。好吧,我们发现,由于一些可怕的类型文件耦合,我们编译的每个.c文件都包含了数百次公共头文件。对于clearcase设计缺陷,这意味着打开这些文件数百次,结果忽略了内容并再次关闭文件

      所以。。不要只是一个#include for foo,而是使用这个保护来有条件地包含foo。通常情况下,这是一个糟糕的做法和可怕的维护噩梦(如果有人开始更换警卫)

      所以。。在.c文件中,您将执行以下操作:

      #include <stdio.h>
      #ifndef FOO_H
      #include "foo.h"
      #endif
      #ifndef FOO_H
      #include "foo.h"
      #endif
      ... rest of your code implementation
      
      #包括
      #伊夫德夫·福安
      #包括“foo.h”
      #恩迪夫
      #伊夫德夫·福安
      #包括“foo.h”
      #恩迪夫
      ... 代码实现的其余部分
      
      就像我说的。。。糟糕的做法,但如果您使用clearcase,并且它以3-4个构建时间(就像我们曾经做的那样)折磨您。。。可能值得考虑(或者只是在clearcase外复制整个树)。或者扔掉干净的箱子。或者更好地处理类型之间的依赖关系


      我们能够“修复”一些过度使用的include,并在构建时间上实现了相当大的改进。

      两个小时!上次我看到这样的构建时间是在过载的VAX上。令人沮丧的是,这是一个非常大的项目。你在建什么?所有文件都在网络驱动器上还是复制到本地?@MartinJames我已经看到一些lisp、c、java项目需要6个小时的构建时间。@Shiplu-我很抱歉。。。我会发疯的。如果5.9小时后建筑出现问题,你如何阻止自己从高楼上跳下来?你对生成未解析外部数据的开发人员做了什么?这很痛苦吗?@Marin构建工作由哈德逊公司每12小时完成一次。如果我们出了问题,SVN日志发现应该责备的开发人员只是好奇,为什么您反对商业解决方案?免责声明:我是ElectricalAccelerator的架构师。是的-快速SSD阵列,加载RAM,将源代码复制到本地文件夹进行构建。消除构建机器上的瓶颈至关重要。感谢您添加要升级的特定项目。。。冲浪、bitTorrent和游戏运行速度也非常快,(在构建之间的短暂休息:)我想说,bitTorrent和冲浪速度更多地取决于网络速度,而构建不应该依赖于网络速度,因此这些不会得到提升,大多数游戏更依赖于GPU性能,因此,你可能不会看到这些方面有多大的速度提升,但是的,操作系统会感觉更灵活。好吧,我承认,很难向一位技术知识渊博的经理证明,构建服务器确实需要两个高端视频卡和一个28英寸的LED显示器:(“构建时间像3-6小时”-哎哟!我想我会找到一个