提高VS 中C++编译速度的建议

[原文发表地址] 提高VS中C++编译速度的建议
[原文发表时间] 2016/10/26
在这篇博客中,我将详述你所能用到的一些功能,方法和工具来减少c ++工程的编译时间。发布这篇博客主要是为了改进开发人员在编写/编译/调试周期中的调试配置来改善编译时间(内部开发循环)。这些建议是调查了一些工程中的编译问题后得出的结果。
开发人员在写代码和调试代码时会频繁的触发编译,所以此处的改进会对生产效率产生巨大的影响。一些建议把焦点放在这一阶段上,但另外一些建议将继续编译实验场景,用优化策略为端对端的功能和性能测试清理生成然后发布。
我们的建议包括:
•使用预编译头文件
•使用 /MP 编译设置
•使用增量链接
•使用 /debug:fastlink 链接设置
•考虑使用第三方编译加速器
•注册求助

开始之前
我将强调一些工程设置中的搜索功能。该功能可以让你在定位和修改工程设置时更容易。
1.找出工程属性并且展开你感兴趣的工具分组
2.选择”All options”分组然后根据名字或者命令行开关来搜索设置,例如下图所示的Multi-processor或者/MP
properties
3.如果你无法搜索到设置,选择”Command Line”分组然后在附加选项中具体说明所要选的开关。

建议
具体的建议包括
•在工程中使用PCH
•在PCH中包括普遍使用的系统,运行环境和第三方头文件
•在PCH中包括基本不会改变的工程特定头文件
•不要包括频繁改变的头文件
•经常审查PCH来确保其和产品的更新同步
•使用/MP
•移除/Gm有利于/MP
•处理和#import有关的冲突并且使用/MP
•使用链接器开关 /incremental
•使用链接器开关 /debug: fastlink
•考虑使用第三方编译加速器

预编译头文件
预编译头文件能够显著的减少编译时间,但是需要在安装和维护上做出努力以确保有最好的结果。我曾调查过几个也不含预编译头文件或者包含一个失效的头文件的工程。一旦把PCH加到工程中来反应当前状态,工程中单独的源文件的编译时间就会减少4-8倍(~4s 到 <1s)
一个理想的PCH是一个达到以下标准之一的头文件
•头文件不经常更改
•在工程中被大量的源文件所包含

SDK,运行环境头文件和第三方库头文件一般都会满足第一个条件并且是PCH包含文件中很好的选择。只用这些文件创建一个PCH能够显著的改善编译时间。另外,如果你的工程特定头文件不经常更改,你可以在PCH中包含它们。
维基百科中搜索相关文章或者在网上搜索预编译头文件相关可以很好的帮助你开始了解PCH。在之后的博客发布中我将继续详细的介绍PCH和工具来帮助你维护PCH文件。

建议
•在工程中使用PCH
•在PCH中包括普遍使用的系统,运行环境和第三方头文件
•在PCH中包括基本不会改变的工程特定头文件
•不要包括频繁改变的头文件
•经常审查PCH来确保其和产品的更新同步

/MP-源文件的并行编译
并行激发编译器的多个实体来编译工程源文件。查看/MP文档来了解更详细的有关开关的详述包括和其他编译特征的冲突。除了文档,这篇博客也提供了有关开关的有用的信息。
解决和其他其他编译器功能有关的冲突
•/Gm(启动最小重新编译):我建议用/MP而不是/Gm来减少编译时间。
•#import:/MP文档讨论了了解决冲突的一个选择。另一个选择是把所有import指令移到预编译头文件中。
•/Yc(创建预编译头文件):/MP对创建预编译头文件没有帮助,所以这不是一个问题。
•/EP, /E, /showIncludes: 这些开关往往被用来诊断问题,因此不是一个问题。

建议
•使用/MP
•移除/Gm有利于/MP
•处理和#import有关的冲突并且使用/MP

/incremental-增量链接
增量链接使链接器显著的加速链接时间。这个特征开启,链接器可以只处理两次链接不同的部分来生成映像,如此在大多数实例第一次编译之后可以加速链接时间4-10倍。在VS2015中,增加了这个先前版本中不支持的功能来处理其他常见的场景。

建议
•使用链接器开关 /incremental

/debug: fastlink-生成局部PDB
链接器花费了大量的时间去收集和合并调试信息并放入一个PDB。有了这个开关,调试信息会被分散到输入的对象和库文件。中型和大型工程的链接时间可以加速差不多2倍。下面的博客讨论了这个功能的详细内容。
用 VS”15”的 /debug: fastlink来加速c++编译周期
VS2015 Update 1 中的 /debug: fastlink功能

第三方编译加速器
编译加速器分析Msbuild工程并创建一个优化资源使用的编译计划。他们会选择性的根据机器分配编译器。下面是两个可能对你有用的编译加速器。
Incredibuild: 这个安装VS扩展组件的链接在新建工程/生成加速是有效的。访问这个网站可以得到更多信息。
Electric Cloud: 访问他们的网页下载链接器并且得到更多的信息。

建议
•考虑使用第三方编译加速器

注册得到帮助
在你试过这些建议并且需要微软C++团队更深入的帮助时,你可以在这里注册。我们的产品团队会联系你。
如果你遇到像软件崩溃一类的问题,点击安装程序或者VS IDE的报告问题选项来告诉我们。如果你想直接与我们沟通,请发送你的email或者反馈给我们。如果有新的功能建议,请通过用户心声告诉我们。