2

假设您有 2 个文件:

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

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

有2个文件:

  • A.cpp
  • A.h.gch,

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

就我而言,g++抱怨.h找不到文件。

4

2 回答 2

1

我不是专家,但来自维基百科

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

我试过了:

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

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

g++ -H -c a.cpp

! a.h.gch
a.cpp
于 2012-08-29T22:43:25.447 回答
1

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

如果某些参数与创建 gch 时不同,则编译失败。因此,我假设您的编译失败,因为GCC 预编译的头文件中提到的至少一个条件没有得到满足。

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

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

于 2012-08-29T22:52:38.560 回答