如何使用 g++ 包含预编译的 .h.gch 标头

Posted

技术标签:

【中文标题】如何使用 g++ 包含预编译的 .h.gch 标头【英文标题】:How to include precompiled .h.gch headers using g++ 【发布时间】:2016-12-08 20:22:09 【问题描述】:

假设我有A.h、A.cpp、B.h和B.h.gch(我从网上下载了B)

如何编译我的代码(并创建可执行文件)?

我做的时候出错了

g++ -c B.h.gch

【问题讨论】:

你得到哪个错误? g++: warning: B.h.gch: linker input file unused because linking not done 这是一个警告,但没有生成.o。 那么你首先是如何编译的? 我通常使用g++ -c sources.cpp,然后使用g++ -o executable sources.o,但我之前从未遇到过.h.gch,Google 暂时无法帮助我。 (对不起,如果我的英语不好) 【参考方案1】:

您实际上只能拥有一个预编译头 myheader.h 并且通常该单个头包含其他头。请参阅this answer 了解更多信息。

您使用 g++ -c myheader.h(和其他相关选项,特别是 -O-g-Wall-Idirname ... 编译该 C++ 头文件;它们应该是与您的目标文件相同)。在实践中,您应该有一个Makefile 并使用make(运行一次make -p 以了解内置规则)。 CXXFLAGS 应该用于目标文件和预编译头文件。

您不会更改任何#include 指令(但实际上您的所有*.cc*.cpp 文件都应该只有一个)。

另请阅读Precompiled headers 部分。

【讨论】:

感谢您的回答 :-)

以上是关于如何使用 g++ 包含预编译的 .h.gch 标头的主要内容,如果未能解决你的问题,请参考以下文章

编译生成的h.gch文件是什么鬼?

理解问题:预编译的标头和包含用法

iOS 和 OS X 目标的通用预编译标头

GCC 和预编译头文件

在每个平台上包含来自同一文件的标头

G++ 编译器找不到 iostream 所需的标头