c++ - 如何建档?

标签 c++ build profiling

我正在开发一个大型 (~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/

相关文章:

C 代码结构引发与 CMake 的链接循环

angular - 如何在单个构建命令中在 Angular 7 项目中构建多个应用程序?

c++ - 使用仪器分析在 iOS 设备上运行的 C++ 代码

c - 分析 Unix 中 C 语言中每个函数的内存使用情况

c++ - Haarcascade 仅在 348x288 图像上运行?

c++ - 如何用opencv读取电表指针?

C++ 和 zlib,帮助压缩字符串

c++ - 动画管理器设计模式?

vb.net - 当应用程序在构建时设置一些配置时,它被称为什么?

f# - F# 做自动内存吗?