我正在开发一个包含数千个源文件的大型解决方案,其中一些可能因为使用Boost和依赖性问题而有超过一千个包含。在12核Xeon E5-2690 v2机器(Windows 7)上并行编译时,使用Waf 1.7.13重建解决方案需要4个小时。我该怎么做才能加快速度?
答案 0 :(得分:5)
我想到的一些事情:
void*
上运行的非通用实施实施您自己的模板,模板仅用作类型安全包装(参见"第42项) :明智地使用私有继承和#34;更有效的C ++"一个很好的例子。)答案 1 :(得分:0)
如果不能重构删除依赖项,并且构建体系结构太不可靠,您必须不时地清理和重建所有内容(在一个完美的世界中,这绝不应该发生),您可以:
答案 2 :(得分:0)
罪魁祸首可能是项目本身的结构:重建的预期时间大致与源文件的数量与其包含的标题数量成正比。通过基于模板的强大编程,这种努力随着源文件的平方而增长。
因此,您有两个相反的选项可以缩短总编译时间:
您减少了每个源文件包含的标头数。这意味着您必须避免使用模板的任何模板。尽量减少模板间的依赖关系。
仅在标头中编程,仅使用单个.cpp文件,该文件会在应用程序中实例化所有不同的模板。这样可以避免重新编译标题。
当然,选项2意味着没有增量构建这样的东西,每次编译时都需要重新编译整个项目。这可能会使您的项目完全无法维护。因此,我强烈建议选择选项1.但是这需要一种不同的编程风格(一种使用模板的模式非常谨慎),而不是您的项目似乎写入。
在任何一种情况下,都没有灵丹妙药:如果不重组整个项目,就不可能对编译时间做出重大改变。
答案 3 :(得分:0)
您可以相对轻松地尝试一些建议: