gcc 文档中说明了这种可能性https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html我有包含预编译标头的文件夹,将其全部命名为.h.gch。它包含几个预编译标头,例如 all1.h.gch、all2.h.gch 等,每个标头针对不同的定义集进行编译。我用单独的 makefile 构建它们。
之后,我构建我的项目,将其命名为 test,并使用自己的 makefile。我使用
-I
选项指定 pch 文件夹:-I/path/to/all.h.gch
根据上面的链接,编译器应该自动从
all.h.gch
文件夹中选择合适的头文件。
如何检查它是否真的使用预编译头而不是每次重新编译 all.h ?使用“时间”实用程序测量编译时间不是一个选项,因为编译时间太短而无法注意到差异。
首先,不要依赖
#include
获取 PCH,因为 Clang 不会这样做(最好有一个与 GCC 和 Clang 兼容的构建过程)。
相反,使用命令行标志包含 PCH 标头
-include path/to/header.h
。
为了确保 PCH 实际被使用,您可以将
header.h.gch
放入不同的目录(远离原始 header.h
),然后将 .gch
的路径传递给 -include
(但不带 .gch
扩展名) ).