我正在开发一个大型 (~1 mloc) C++ 应用程序,它需要很长时间才能从源代码构建(在使用 Visual Studio 的 Windows 上,在使用 Makefile 或 XCode 的 Mac 上)。我想知道从哪里开始优化(例如预编译 header 、前向声明……)。
对于应用程序本身的性能,我想在开始优化之前分析构建过程。
有哪些工具可以支持这一点?
最佳答案
首先,请准确说明您使用的是哪个版本的 Visual Studio。如果可能,请升级到 VS2010,因为它对并行构建有更好的支持。这里有几件事需要考虑:
- 将源代码树放在与系统磁盘不同的磁盘上。如果您可以扩展到 2 个 SSD(1 个用于系统,1 个用于源),那么这将产生巨大差异
- 启用并行构建。在 VS2010 中,对于与您的项目大小相同的项目,这使我们的构建时间减半。启用“多处理器编译”开关 (/MP)。您可能会发现,如果您的一两个项目具有奇怪的依赖关系,则可能需要将其关闭,但只要对大多数项目启用它,您就会获得巨大的提升。
- VS2010 具有详细的构建时间记录选项,可以帮助您隔离在不同项目中花费的时间。 VS2005/2008 有构建时间选项
- 如果您有 VS2005 或 VS2008,请试试 MPCL插件(它不是免费的,但非常便宜),它将比 VS 本身做更好的并行构建。如果您有预算,可以使用 Incredibuild 等工具
- 如果您使用的是 Makefile,则使用
-j
标志进行并行处理。如果您使用的是 Xcode,那么如果您有其他可用的 Mac,则可以使用分布式构建(尽管我自己从来没有运气过) - 你可以考虑使用 ccache与海合会
- 为所有或大多数项目启用预编译 header 。可能需要进行一些试验才能确定您获得了多少 yield ——您投入的越多,您确实会很快遇到 yield 递减的问题(投入的越多,您需要进行的重建就越多)<
- 在 Large Scale C++ Design 上阅读 John Lakos 的书这是关于如何拆分大型项目以隔离依赖项的绝佳建议来源
- 考虑一个两阶段构建过程。如果您有很多需要构建的第三方库,或者其他不经常更改所有内容的库,请为它们设置一个单独的项目。尝试与您的主项目并行构建它或保存二进制文件。考虑将二进制文件 checkin 您的源代码控制系统(是的,我知道将二进制文件 checkin SCM 通常被认为是邪恶的,但我相信您必须务实)
关于c++ - 如何建档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11685591/