1

我正在开发一个大型(~1 mloc)C++ 应用程序,该应用程序需要很长时间才能从源代码构建(在使用 Visual Studio 的 Windows 上,在使用 Makefile 或 XCode 的 Mac 上)。我想知道从哪里开始优化(例如预编译的头文件、前向声明……)。

与应用程序本身的性能一样,我想在开始优化之前分析构建过程。

有哪些工具可以支持这一点?

4

2 回答 2

2

首先,请准确说明您使用的是哪个版本的 Visual Studio。如果可能,升级到 VS2010,因为它对并行构建有更好的支持。这里有几件事情需要考虑:

  • 将源代码树放在与系统磁盘不同的磁盘上。如果您可以扩展到 2 个 SSD(1 个用于系统,1 个用于源),那么这将产生巨大的差异
  • 启用并行构建。在 VS2010 中,这将我们构建与您的大小相同的项目的时间减半。启用“多处理器编译”开关 (/MP)。您可能会发现,如果您的一两个项目有奇怪的依赖关系,它们可能需要关闭它,但只要大多数项目都启用它,那么您将获得巨大的提升。
  • VS2010 具有详细的构建时间记录选项,可以帮助您隔离在不同项目中花费的时间。VS2005/2008 有一个构建时间选项
  • 如果你有 VS2005 或 VS2008,那么试试MPCL插件(它不是免费的,但非常便宜),它会比 VS 本身做更好的并行构建。如果您有预算,可以使用 Incredibuild 等工具
  • 如果您使用的是 Makefile,则使用该-j标志进行并行化。如果您使用的是 Xcode,那么如果您有其他可用的 Mac,则可以使用分布式构建(不过,我自己从来没有遇到过这样的运气)
  • 您可以考虑将ccache与 gcc 一起使用
  • 为所有或大多数项目启用预编译头文件。可能需要进行一些试验才能确定您获得了多少收益——您投入的收益越多,收益递减的速度就会越快(投入的越多,您需要进行的重建就越多)
  • 阅读 John Lakos 关于大规模 C++ 设计的书,这是关于如何拆分大型项目以隔离依赖关系的绝佳建议来源
  • 考虑一个两阶段的构建过程。如果您有很多需要构建的第三方库,或者其他不经常更改的库,那么为它们设置一个单独的项目。尝试与您的主项目并行构建或保存二进制文件。考虑将二进制文件检入您的源代码控制系统(是的,我知道将二进制文件检入 SCM 通常被认为是邪恶的,但我相信您必须务实)
于 2012-07-27T10:22:08.670 回答
1

有很多方法可以改善构建时间。其中之一当然是更多的硬件,即更快的磁盘和更多的 RAM。另一个是编译器的功能,如预编译头文件。还有一些外部工具可以提供帮助,例如distccccache。对于 GNU make,还可以-j选择并行运行多个 make 进程。

于 2012-07-27T10:14:07.550 回答