可以使用哪些技术来加快c++编译时间?

这个问题出现在一些关于Stack Overflow问题c++编程风格的评论中,我很有兴趣听听有什么想法。

我看到过一个相关的问题,为什么c++编译要花这么长时间?,但这并没有提供很多解决方案。


当前回答

如果您有一个多核处理器,Visual Studio(2005及以后版本)和GCC都支持多处理器编译。当然,如果你有硬件,这是可以实现的。

其他回答

如果您有一个多核处理器,Visual Studio(2005及以后版本)和GCC都支持多处理器编译。当然,如果你有硬件,这是可以实现的。

一旦您应用了上面所有的代码技巧(前向声明、将公共头中的头包含减少到最低限度、使用Pimpl将大多数细节推入实现文件中……),并且在语言方面没有任何其他收获,那么考虑您的构建系统。如果您使用Linux,请考虑使用distcc(分布式编译器)和ccache(缓存编译器)。

第一个函数distcc在本地执行预处理器步骤,然后将输出发送到网络中第一个可用的编译器。它要求网络中所有配置节点的编译器和库版本相同。

后者ccache是编译器缓存。它再次执行预处理器,然后检查内部数据库(保存在本地目录中),该预处理器文件是否已经用相同的编译器参数编译过。如果是,它只弹出编译器第一次运行时的二进制文件和输出。

这两种方法可以同时使用,这样如果ccache没有本地副本,它可以通过网络将副本发送到带有distcc的另一个节点,或者它可以只注入解决方案而不进行进一步处理。

来自微软:https://devblogs.microsoft.com/cppblog/recommendations-to-speed-c-builds-in-visual-studio/

具体建议包括:

项目使用PCH吗 是否包含常用的系统、运行时和第三方头文件 PCH 在PCH中包含很少改变项目特定的头 不包括经常变化的头 是否定期审核PCH以保持产品流失的最新情况 使用/ mp 是否移除/Gm以支持/MP 是否解决与#import和use /MP的冲突 是否使用连接器开关/增量 使用链接器开关/调试:fastlink 是否考虑使用第三方构建加速器

不是关于编译时间,而是关于构建时间:

如果在工作时必须重新构建相同的文件,请使用ccache 在构建文件上 使用忍者建造而不是制造。我目前正在编译一个项目 有~100个源文件和所有缓存的ccache。使需要 5分钟,忍者不到1分钟。

你可以用-GNinja从cmake生成忍者文件。

在Linux(也许还有其他一些* nix)上,您可以通过不盯着输出并更改到另一个TTY来加速编译。

下面是实验:printf使我的程序变慢