如何提高Visual C ++编译时间?
我正在编译一个buildbot中的2个C ++项目,每次提交。 两者都有大约1000个文件,其中一个是100kloc,另一个是170kloc。 编译时间与gcc(4.4)到Visual C ++(2008)非常不同。
一个项目的Visual C ++编译在20分钟内完成。 他们无法利用多核心,因为项目依赖于其他核心。 最后,调试和发布中的32位和64位两个项目的完整编译需要超过2个半小时。
一个项目的gcc汇编需要4分钟。 它可以在4个核心上并行,大约需要1分10秒。 这两个项目的4个版本(Debug / Release,32/64位)的所有8个版本都在不到10分钟的时间内编译完成。
Visual C ++编译时发生了什么? 他们基本上慢了5倍。
预计编译C ++ kloc的平均时间是多少? 我的vc ++为7 s / kloc,gcc为1.4 s / kloc。
可以做什么来加快Visual C ++编译时间?
减慢VC ++编译器的一件事是,如果你有一个头文件来初始化非trival const
值类型的具体实例。 你可能会看到这种情况发生在std::string
或GUID类型的常量上。 它影响编译和链接时间。
对于单个DLL,这导致了10倍的放缓。 如果你把它们放在一个预编译头文件中,或者只是将它们声明在一个头文件中,并将它们初始化为一个cpp文件,它会有所帮助。
不妨看看病毒扫描程序,并确保试验预编译的头文件,没有它你就不会看到VC ++。
哦,是的,并确保%TMP%文件夹与构建版本的位置相同,因为VC ++会生成临时文件并在稍后移动它们。
相互依赖的项目并不意味着不可能进行并行化。 构建系统足够聪明,能够发现并避免关键的依存关系,否则gcc将无法使用4个内核。
因此(除了其他步骤),为什么不尝试使用/ MP在Visual Studio中启用多处理(请参阅http://msdn.microsoft.com/zh-cn/library/bb385193.aspx)。
这不是问题的直接答案,但在我的公司,我们使用IncrediBuild进行分布式编译。 它确实加快了编译过程。 http://incredibuild.com/visual_studio.htm
链接地址: http://www.djcxy.com/p/85457.html