使用预编译头编译cpp

时间:2012-08-29 21:55:05

标签: c++ g++ precompiled-headers

假设您有2个文件:

  • A.h
  • A.cpp,其中A.cpp包含A.h

您将标题预编译为A.h.gch并删除A.h

有2个文件:

  • A.cpp
  • A.h.gch

如何使用g ++编译最终产品?

就我而言,g++抱怨.h文件无处可寻。

2 个答案:

答案 0 :(得分:1)

我不是专家,而是来自Wikipedia

  

GCC只能使用预编译版本,如果设置相同的编译器开关,就像编译头文件时一样,它最多可以使用一个。

我试过了:

g++ a.h
rm a.h
g++ -c a.cpp

你可以看看g ++是否正在使用它:

g++ -H -c a.cpp

! a.h.gch
a.cpp

答案 1 :(得分:1)

我认为g ++会检查标题的日期,看看gch是否过时了。 令我惊讶的是,事实并非如此。我可以修改并重命名标题,仍然可以编译cpp。

如果某些参数与创建gch时的参数不同,编译将失败。 因此,我假设您的编译失败,因为GCC precompiled header docs中提到的至少一个条件未得到满足。

如果您经常在不同的编译配置之间切换,您可以为每个配置使用包含pch的目录,如该文档中所述。

如果您只想确保/如果使用了pch,请使用-Winvalid-pch选项,并确保在每次更改标题后更新pch。