我们有一个大型Visual Studio 2005 C ++ / Mfc解决方案,1个项目包含大约1300个源文件(因此大约有650.h和650个.cpp文件)。我们还使用Boost和其他一些库(COM:MSXML,Office)。
最近,我添加了一些boost :: multi_index实例来加快速度。这一切都在大部分时间汇编。但是现在,当我正在进行完整(发布)重建时,我会在几个模块上遇到编译器崩溃。
Fatal Error C1060: "compiler is out of heap space"
我已经尝试在预编译的头文件中减少包含(删除了除标准MFC头之外的所有内容)。另外,我删除了编译器选项/ Zm200(我们在编译预编译头文件之前需要它)。
奇怪的是:当我在编译器崩溃后按F7(build)时,构建过程继续没有任何问题(或者至少在下一次编译器崩溃时再次按F7)。但是能够在没有任何中断的情况下完成构建将会很棒。
我可以影响各个模块的构建顺序吗?这样,我可以将“有问题”的模块放在流程的开头(并希望崩溃不只是转移到其他模块)。
顺便说一句:完整的构建需要大约90分钟。
更新
感谢您的回答。我能够摆脱编译器崩溃并显着减少编译时间。这是我做的:
更新2:
上面,我提到“单核机器”,实际上是一个较慢的双核机器。
答案 0 :(得分:3)
如果有1300个文件需要很长时间才能编译,那么你将包含太多不必要的头文件。我猜人们已经将一堆headre文件剪切并粘贴到CPP文件中,而没有考虑他们实际需要哪些标题,以便在它们不应该包含它们时加载它们。我也猜测你没有向前宣布你应该去的课程。
我建议你需要花一些时间浏览你的项目并删除不必要的#includes。我怀疑这会解决你的内存不足问题并且会缩短你的编译时间。
答案 1 :(得分:2)
我必须同意Goz,看一下this (SO) post,看看如何帮助删除多余的头文件。
我们的C ++解决方案规模很大,过去需要50分钟才能编译,通过仔细的头文件分析,我们可以将其缩短到8分钟。
答案 2 :(得分:0)
IncrediBuild(VC ++的分布式构建系统)除了节省时间外还有一个额外的有用功能。如果远程计算机无法返回结果,它将自动重新启动编译。因此,您应该能够在5分钟或10分钟内完成构建,而不会崩溃。