如何为大量标题生成.pch?

4nt*_*ine 6 c++ gcc clang pch

我的代码一直使用libcxx,sdl和其他一些库.我如何生成.pch考虑到每个标题可以包含一些其他标题(即使是像#ifdef #include #endif这样的复杂条件.这就是为什么很难理解所需的标题文件列表.我应该只使用在中找到的所有标题文件那个文件夹来创建.pch?在这种情况下,使用这种.pch性能怎么样?

更新:如果重要的话我将使用它与Clang(不是GCC),并通过Clang C API更具体.UPDATE2:

我为单头文件创建了pch:

MBA-Anton:pch asmirnov$ clang++ -x c++-header header.h -emit-pch -o header.pch
MBA-Anton:pch asmirnov$ clang++ -include-pch header.pch source.cpp -o source -x c++
Run Code Online (Sandbox Code Playgroud)

但我无法为多个文件生成pch:

MBA-Anton:pch asmirnov$ clang++ -x c++-header header.h header2.h -emit-pch -o headers.pch
clang: error: cannot specify -o when generating multiple output files
Run Code Online (Sandbox Code Playgroud)

Den*_*nis 1

首先,我没有将 pch 与 gcc 一起使用,仅与 microsoft 编译器一起使用。

#ifdef 等条件都在编译之前解决,因此如果您更改预处理器变量,PCH 文件无论如何都会被编译。因此,只需添加您需要的库中的所有文件即可。

一般来说,包括所有不太可能经常更改的标头(即外部库和系统中稳定的部分)。

不必太担心在 pch 文件中多次包含标头。由于该文件不会经常编译,因此您可以在此处忽略较长的编译时间。

我不确定的是,当您将所有内容都包含在 pch 文件中时,可执行文件的大小是否会变大。出现这种情况可能是因为您引用了未使用的代码部分,而这些代码部分仅因为您将它们添加到了 pch 文件中而被编译到可执行文件中。您可能想对此进行测试。

现在,根据我的经验,另一个重要的问题是编译或链接时编译性能是否很慢。

当链接时间较长时,问题更有可能是您在代码的标头中包含了太多标头。

这可以通过在头文件中使用前向声明并仅在 .cpp 文件中包含头文件来优化。我们有巨大的整体项目,每次编译/链接的最大性能提升都是通过尽可能多地前向声明来消除头依赖项。

这是因为增量编译工作得很好,但增量链接却不行。

以下是有关前向声明的注意事项的简短但很好的汇编: http://www.chromium.org/developers/coding-style/cpp-dos-and-donts