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

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

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


当前回答

我推荐《Games from Within, Indie Game Design And Programming》中的以下文章:

物理结构和c++ -第1部分:概览 物理结构和c++ -第2部分:构建时间 甚至更多的包含实验 《超人总动员》有多不可思议? 预编译头文件的处理和提供 追求完美的建造系统 追求完美的构建系统(下)

当然,它们已经很旧了——你必须用最新的版本(或你可用的版本)重新测试所有的东西,才能得到真实的结果。无论如何,这都是一个很好的创意来源。

其他回答

以下是一些例子:

通过启动一个多编译作业(make -j2就是一个很好的例子)来使用所有处理器内核。 关闭或降低优化(例如,GCC使用-O1时比使用-O2或-O3时快得多)。 使用预编译的头文件。

从Visual Studio 2017开始,你可以有一些编译器度量需要花费的时间。

将这些参数添加到项目属性窗口中的C/ c++ ->命令行(附加选项): /Bt+ /d2cgsummary /d1reportTime . /Bt+ /d2cgsummary /d1reportTime . /

你可以在这篇文章中获得更多信息。

尽可能使用前向声明。如果类声明只使用指向类型的指针或引用,则可以向前声明它,并在实现文件中包含该类型的头文件。

例如:

// T.h
class Class2; // Forward declaration

class T {
public:
    void doSomething(Class2 &c2);
private:
    Class2 *m_Class2Ptr;
};

// T.cpp
#include "Class2.h"
void Class2::doSomething(Class2 &c2) {
    // Whatever you want here
}

更少的包含意味着更少的预处理器工作,如果你做得足够多的话。

我推荐《Games from Within, Indie Game Design And Programming》中的以下文章:

物理结构和c++ -第1部分:概览 物理结构和c++ -第2部分:构建时间 甚至更多的包含实验 《超人总动员》有多不可思议? 预编译头文件的处理和提供 追求完美的建造系统 追求完美的构建系统(下)

当然,它们已经很旧了——你必须用最新的版本(或你可用的版本)重新测试所有的东西,才能得到真实的结果。无论如何,这都是一个很好的创意来源。

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

具体建议包括:

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