如何使用.h.gch文件

7
我最近了解到了C++中的预编译头,特别是对于gcc编译器。.h.gch文件的相关内容我在网上找到了一些资料,但是还没有能够使用它们。
我需要知道:
  1. 如何创建一个.h.gch文件? 我的代码没有创建一个?
  2. 一旦创建,如何使用它? 你像使用其他用户定义的文件一样包含它吗? 例如:#include "SomeCode.h.gch"
或者有没有其他使用方法? 请帮忙。
1个回答

9
使用GCH(Gnu预编译头)很容易,至少在理论上是这样的。
如何创建GCH:
只需使用gcc<compiler-options> myfile.h。这将创建myfile.h.gch。您可以使用-o<name>指定输出文件的名称。
如果您的头文件是C ++,则必须将其命名为myfile.hppmyfile.hh,否则GCC将尝试将其编译为C并可能失败。或者,您可以使用-x c ++-header编译器选项。
如何使用GCH:
myfile.h.gch放在与myfile.h相同的目录中。然后它将自动使用而不是myfile.h,至少在编译器选项相同的情况下。
如果您不想(或无法)将*.gch 放在*.h的同一目录中,则可以将它们移动到目录中,例如./gch,并将-Igch选项添加到编译器命令中。
如何知道正在使用您的GCH:
使用gcc-H<compiler-options> myfile.c。这将列出包含的文件。如果您的myfile.h.gch 未出现或出现了x,则表示出现了一些问题。如果它出现并带有!,恭喜!您正在使用它。

我尝试使用 gcc -H 选项,但是我使用的是 g++,然后出现了某种无限循环的情况。无论如何,我已经得到了我的 .h.gch 文件,只是还不知道它是否被使用。 - zhirzh
谷歌上关于“-Igch”的唯一结果是你的评论。你从哪里得到这个信息的? - Maciej Załucki
@MaciejZałucki:你把它读成了一个名为Igck的选项,但实际上它是一个选项I加上一个参数gch-I是添加目录到头文件搜索列表中的众所周知的开关;而gch只是我编造的目录名称./gch - rodrigo
你写的方式有点误导人了 :) 我弄明白了,GCC搜索预编译头文件的方式与它搜索头文件的方式相同 - 优先使用包含目录中的第一个匹配项。我必须检查一件事情,那就是它是否首先在所有地方搜索 .h.gch 然后才搜索 .h,或者它是在每个包含目录中先搜索 .h.gch 然后再搜索 .h。我怀疑是后者,所以 -I /gch/dir 需要在头文件本身之前包含。 - Maciej Załucki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接