假设您有 2 个文件:
A.h
和A.cpp
, 其中A.cpp
包括A.h
您将标头预编译为A.h.gch
并删除A.h
有2个文件:
A.cpp
和A.h.gch
,
如何使用 g++ 编译最终产品?
就我而言,g++
抱怨.h
找不到文件。
假设您有 2 个文件:
A.h
和A.cpp
, 其中A.cpp
包括A.h
您将标头预编译为A.h.gch
并删除A.h
有2个文件:
A.cpp
和A.h.gch
,如何使用 g++ 编译最终产品?
就我而言,g++
抱怨.h
找不到文件。
我不是专家,但来自维基百科:
如果设置了与编译头文件时相同的编译器开关,GCC 只能使用预编译版本,并且最多可以使用一个。
我试过了:
g++ a.h
rm a.h
g++ -c a.cpp
您可以查看 g++ 是否正在使用它:
g++ -H -c a.cpp
! a.h.gch
a.cpp
我假设 g++ 会检查标题的日期,以查看 gch 是否已过时。令我惊讶的是,事实并非如此。我可以修改和重命名标题,并且仍然可以编译 cpp。
如果某些参数与创建 gch 时不同,则编译失败。因此,我假设您的编译失败,因为GCC 预编译的头文件中提到的至少一个条件没有得到满足。
如果您经常在不同的编译配置之间切换,则可以使用包含每个配置的 pch 的目录,如该文档中所述。
如果您只是想确保/如果使用了 pch,请使用该-Winvalid-pch
选项,并确保在每次更改标题后更新 pch。