我尝试将预编译的标头与GCC配合使用,以加快构建速度。这个项目有大约80个文件,其中大多数都包含一个我预先编译的标头。该头包括大量其他头。至少在纸面上,这似乎是使用PCH的好用例。
使用clang时,我得到了预期的加速,大约快了2倍。但是,在gcc上,编译需要的时间更长。
我将我的PCH存储在一个单独的目录中,并尝试使用-I
添加目录,以及尝试直接使用-include
指定PCH(这没有用:gcc最终包括PCH和普通标头)。 PCH的编译选项与源文件相同。
不进行PCH编译大约需要13秒。使用PCH大约需要18秒。我用-H
和-Winvalid-pch
验证了gcc(仅)包括预编译的标头。 -H
的单个文件的完整输出如下所示:
! .bake_cache/x64-Linux-debug/include/corto.h.gch
./src/lang/boolean.c
!
应该表明gcc已成功加载pch:
-H除其他常规活动外,打印使用的每个头文件的名称。每个名称都缩进以显示 是“ #include”堆栈。预编译的头文件也会被打印出来, 即使发现它们无效;无效的预编译头 文件以“ ... x”打印,有效文件以“ ...!”打印。
发件人:https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
我很茫然。 gcc似乎能够找到并使用PCH,但仍然需要更长的时间。你知道是什么原因造成的吗?