可以使用哪些技术来加快c++编译时间?
这个问题出现在一些关于Stack Overflow问题c++编程风格的评论中,我很有兴趣听听有什么想法。
我看到过一个相关的问题,为什么c++编译要花这么长时间?,但这并没有提供很多解决方案。
可以使用哪些技术来加快c++编译时间?
这个问题出现在一些关于Stack Overflow问题c++编程风格的评论中,我很有兴趣听听有什么想法。
我看到过一个相关的问题,为什么c++编译要花这么长时间?,但这并没有提供很多解决方案。
当前回答
当我从大学毕业时,我看到的第一个真正有生产价值的c++代码有这些神秘的#ifndef…#endif指令在它们之间定义头文件的地方。我以一种非常天真的方式问了那个写代码的人关于这些重要的东西,他被介绍给了大规模编程的世界。
回到正题,当谈到减少编译时间时,使用指令来防止重复的头定义是我学到的第一件事。
其他回答
从Visual Studio 2017开始,你可以有一些编译器度量需要花费的时间。
将这些参数添加到项目属性窗口中的C/ c++ ->命令行(附加选项): /Bt+ /d2cgsummary /d1reportTime . /Bt+ /d2cgsummary /d1reportTime . /
你可以在这篇文章中获得更多信息。
以下是一些例子:
通过启动一个多编译作业(make -j2就是一个很好的例子)来使用所有处理器内核。 关闭或降低优化(例如,GCC使用-O1时比使用-O2或-O3时快得多)。 使用预编译的头文件。
使用动态链接而不是静态链接会让你的编译器更快。
如果你使用t Cmake,激活属性:
set(BUILD_SHARED_LIBS ON)
Build Release,使用静态链接可以得到更多的优化。
虽然不是一个“技术”,我不知道Win32项目与许多源文件编译速度比我的“Hello World”空项目。因此,我希望这能帮助到像我这样的人。
在Visual Studio中,增加编译时间的一个选项是增量链接(/ Incremental)。它与链接时代码生成(/LTCG)不兼容,因此在进行版本构建时请记住禁用增量链接。
只是为了完整性:构建可能很慢,因为构建系统很愚蠢,也因为编译器花了很长时间来完成它的工作。
关于Unix环境中这个主题的讨论,请阅读递归使其被认为是有害的(PDF)。