如何在大型C++;项目 我想减少一个大型C++项目的编译时间。 我尝试使用预编译的头文件、接口等。 但在继续之前,我想知道是否有任何工具可以帮助检测编译时间为何如此之长。 有人建议使用pc lint,我会试一试。 但是,如果有其他工具可以分析编译时并讨论任何提高编译速度的提示,请告诉我。 提前谢谢 环境:微软Visual Studio C++ 2008或2010。< /P> < P>我不知道有任何工具来改善编译时间,但很少有人工补救,我可以建议(考虑这是注释): 让#在每个头文件中包含防护,以便多个 包含不会产生任何问题 减少成员函数体,直接放入内联函数体 进入头文件;只要有他们的声明 检查是否没有不必要的模板函数和类; 请记住,默认情况下,tempaltes变为inline。太多 模板/元编程会导致大量编译时间 如果#define的数量过高,那么它们将 增加预处理阶段,最终增加 编译时间
我喜欢的一种方法是查看一些源代码的预处理器输出——只是从编译器的角度阅读其中的一些,而不是从某种程度上抽象的表示形式,即如何在大型C++;项目 我想减少一个大型C++项目的编译时间。 我尝试使用预编译的头文件、接口等。 但在继续之前,我想知道是否有任何工具可以帮助检测编译时间为何如此之长。 有人建议使用pc lint,我会试一试。 但是,如果有其他工具可以分析编译时并讨论任何提高编译速度的提示,请告诉我。 提前谢谢 环境:微软Visual Studio C++ 2008或2010。< /P> < P>我不知道有任何工具来改善编译时间,但很少有人工补救,我可以建议(考虑这是注释): 让#在每个头文件中包含防护,以便多个 包含不会产生任何问题 减少成员函数体,直接放入内联函数体 进入头文件;只要有他们的声明 检查是否没有不必要的模板函数和类; 请记住,默认情况下,tempaltes变为inline。太多 模板/元编程会导致大量编译时间 如果#define的数量过高,那么它们将 增加预处理阶段,最终增加 编译时间,c++,visual-studio,visual-studio-2008,compiler-optimization,C++,Visual Studio,Visual Studio 2008,Compiler Optimization,我喜欢的一种方法是查看一些源代码的预处理器输出——只是从编译器的角度阅读其中的一些,而不是从某种程度上抽象的表示形式,即#include。很可能您会发现一些大块的include/libraries,您不需要,也不一定知道依赖关系/include的存在(或需要)。在此基础上,决定可以删除哪些依赖项。即使您的依赖关系都是正确的,大输出也可以建议您如何将较大的模块划分为较小的部分。C++不是模块化的(但),编译瓶颈通常是由于包含问题;这就是在不需要文件时使用包含太多文件。这也有可能是目前需要的,但通过
#include
。很可能您会发现一些大块的include/libraries,您不需要,也不一定知道依赖关系/include的存在(或需要)。在此基础上,决定可以删除哪些依赖项。即使您的依赖关系都是正确的,大输出也可以建议您如何将较大的模块划分为较小的部分。C++不是模块化的(但),编译瓶颈通常是由于包含问题;这就是在不需要文件时使用包含太多文件。这也有可能是目前需要的,但通过一些简单的重新设计可能会变得多余
- 要检测多余的include,您可以检查一下,唯一的问题是它在Clang之上工作,所以您需要在那里进行一些设置
- 否则,您需要检查代码,特别是标题
#include
的标题都是高度可疑的基本上,它将所有
.cpp
文件包含到一个.cpp文件中,并且只编译一个文件。
我在一个大项目上进行了测试,结果非常有效。它之所以有效,是因为当它一次包含所有头/cpp而不是每个cpp时,使用的I/O要少得多 现在我们不再使用unity builds了,因为我们都升级了SSD硬件,它们太棒了
这里有一个关于Unity builds的相关SO问题:不是直接的答案,但您确实打开了并行构建?一般评论是不要包含您不需要的标题。构建时最糟糕的事情是一个名为includes.hpp的头文件,它包含您需要的所有可能的头文件。我已经看到了重新编译时的膨胀。硬件升级怎么样?确保你有一个合适的构建系统,只重建那些已经更改的文件。然后您可以使用PIMPL之类的工具来最小化耦合和编译依赖性。@David:我一直都在这样做。。。每个标题都配有一个“#ifndef foo\n#define foo…”#当然是endif。我不应该吗?+1-关于Unity Builds的评论非常有趣-下次我碰到一个低级标题时,我必须尝试一下。至于SSD,我玩得太晚了:在HDD崩溃后,我刚刚将它添加到笔记本电脑上——速度的提高建议我应该将编译框改为SSD。在你的评论之后,我肯定会做出改变,一旦容量稍微高一点/价格稍微便宜一点。