通过Unity Build加快C ++的构建速度,并减少标头依赖性

时间:2018-09-20 10:55:23

标签: c++ optimization ccache

我刚刚将Objective-C(++)项目转换为纯C ++。 在移动越来越多的代码时,我注意到构建时间增加了很多。

我的项目目前分为几个框架/ dylib和一个使用这些框架的主项目。

我进行了一些研究,发现基本上可以建议减少构建时间的三件事:

  • 减少头文件依赖
  • 使用统一构建
  • 使用ccache之类的工具不会一直重做不必要的工作

我实现了ccache,效果很好,并且我可以大大减少构建时间。

我不确定如何减少头文件的依赖关系和统一的构建。我读到,统一构建的一个很大缺点是,如果您在一个有意义的源文件中进行更改,则需要重新编译所有内容。但是,这对于框架来说不是问题,因为如果它们发生更改,则无论如何都需要重新编译。

我读到,使用“伞形标头”(例如“ MyFramework.h”)是不好的做法,尽管其中可能只包含少数几个标头,但它会包含给定框架的所有公共标头。

Cocoa到处都使用伞形标题,这比选择每个源文件所需的确切标题容易得多。 但是,使用统一构建时,每个框架只有一个头,对吗?

选择单个标头还是有意义的,还是可以在统一构建中使用“伞形标头”?

在这里摸黑,不想花时间去实施对最终没有帮助的技术。

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

感觉像是对自以为是的问题的提问。我的是这样的:

始终减少标头依赖性。减少的依赖性使整体架构更整洁。职责明确,松散耦合的独立小个体模块总是比意大利面条好用。

使用预编译头来编译很少更改的头。第三方,库和框架的伞头很少更改,因此也很少需要解析和重新编译。

在大多数情况下,请使用单独的单元(少量cpp文件)并针对这些单元进行单元测试。否则,您将构建整个程序,然后在其中导航到感兴趣的情况,然后在那里调试程序,依此类推。也许您喜欢它,但是我太懒了,它无聊重复,浪费了我的时间。仅链接整个C ++程序(有价值的东西)通常需要十分钟或更长时间,而且我不需要那么多的休息时间。

请勿使用统一版本,最好使用持续集成 push将自动构建并运行整个程序的所有单元测试,并准备二进制文件。 其他计算机(或服务器场)。完成(或失败)时会通知您,并且 那么您也可以选择二进制文件并调试整个程序。