编译大型头文件 C++

Posted

技术标签:

【中文标题】编译大型头文件 C++【英文标题】:Compiling large header files C++ 【发布时间】:2015-11-19 20:28:50 【问题描述】:

我的代码组织为

//LARGEHEADER.H

class LARGE 

 ...


//SMALLER.H
#include "LARGEHEADER.H"
class SMALL: protected LARGE 
...


//and in each of A.C, B.C, C.C ...
#include "SMALLER.H"
void f() 
 ...

现在 LARGEHEADER.H 大约为 10 MB。在尝试编译此设置时,它似乎占用了大量时间和内存,我的最终可执行文件接近 90 MB。请指出我做错了什么。如何使用此设置加快编译速度。

【问题讨论】:

我会谦虚地建议 10mb 的标头太大了。无论如何,你不能在 gcc 中预编译你的头文件吗? Precompiled Headers in Header Files的可能重复 如果 SMALL 总是包含 LARGE,那么分隔 LARGE 和 SMALL 标头有什么意义? @KevinDTimm 感谢您推荐预编译头文件。我会调查的 @SergeyA :我正在处理一些以这种方式构建的遗留代码。所以改变它是最后的手段(如果它确实有助于加快编译) 【参考方案1】:

感谢您提出预编译头文件的解决方案。预编译头文件是一种优化策略,它没有解决问题的根本原因,即编码风格。参考这篇文章

Why does C++ compilation take so long?

在多个源/头文件中包含大型头文件将导致编译崩溃(为每个包含器生成调试/符号信息)。我重新组织了代码以删除此类依赖项。

【讨论】:

以上是关于编译大型头文件 C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ 预编译头文件已禁用

预编译标准库头文件 - C++

带有 Rcpp 头文件的 c++ 文件的编译步骤

C++ 头文件引用

VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)