可以使用哪些技术来加快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)。