首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为多个headers生成.pch?

如何为多个headers生成.pch?
EN

Stack Overflow用户
提问于 2014-11-04 14:55:34
回答 1查看 2K关注 0票数 8

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

UPDATE2:

我已经为单头文件创建了pch:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-11-04 17:02:13

首先,我没有和gcc一起使用pch,只在微软编译器中使用过。

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

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

不要担心在pch文件中多次包含头文件。因为这个文件不会经常被编译,所以你可以在这里忽略高的编译时间。

我不确定的是,当您在pch文件中包含所有内容时,可执行文件的大小是否会变得更大。情况可能是这样的,因为您引用了原本不使用的代码部分,这些代码部分编译到您的可执行文件中只是因为您将它们添加到pch文件中。您可能想要测试一下。

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

当你有很高的链接次数时,问题更有可能是你在代码的头中包含了太多的头。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26729319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档