我的代码一直都在使用libcxx,sdl和其他一些lib。考虑到每个 header 都可以包含其他 header (即使在诸如#ifdef #include #endif这样的复杂条件下),我如何生成.pch。这就是为什么很难理解所需的 header 文件列表的原因。我应该只使用在中找到的所有 header 文件那个文件夹来创建.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++

但是我无法为多个文件生成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

最佳答案

GCC编译器只能与一个包含的预编译头as explained in this answer一起很好地工作。因此,如果您想在GCC中使用PCH,则需要为应用程序的所有翻译单元使用一个头文件(并且每个头文件都应以该单个 #include指令开头)

我猜想这种情况对其他支持某些预编译头文件的编译器也有帮助。

C++标准的 future 版本(发布于C++14)可能会定义模块机制。参见例如n4047提案。

请注意,预编译的 header 是非常特定于编译器的(对于GCC,从GCC 4.9.1升级到GCC 4.9.2时它们甚至可能无法工作),因此您不应过分依赖它们。

07-24 09:45
查看更多