如何验证GCC是否真正使用了预编译头文件?
确认GCC是否使用预编译头的几种方法
当编译时间太短无法通过time工具判断时,可以用以下几种可靠方式验证:
1. 使用-H选项查看头文件加载情况
GCC的-H参数会输出所有被包含的头文件路径,其中预编译头文件会以!开头标记。
执行编译命令时添加该选项:
gcc -H -I/path/to/all.h.gch test.c -o test
如果输出中出现类似! /path/to/all.h.gch/all1.h.gch的行,说明编译器加载了对应的预编译头;若只有./all.h这类不带!的行,则说明未使用预编译头。
2. 用-ftime-report生成编译时间明细
该选项会输出详细的编译阶段时间报告,其中会明确列出预编译头的加载耗时(若被使用)。
编译命令示例:
gcc -ftime-report -I/path/to/all.h.gch test.c -o test
查看输出内容,寻找Preprocessing阶段下的reading precompiled header相关条目,或专门的precompiled header setup时间统计,存在这类条目即说明预编译头被使用。
3. 通过修改文件触发验证
- 方法一:在预编译头文件(如
all1.h.gch)中故意加入语法错误(比如#error "PCH used"),重新编译项目。若编译时输出该错误,说明编译器加载了预编译头;若无错误输出,则说明直接编译了原all.h。 - 方法二:修改原
all.h的内容(比如添加一行无关代码),若编译时间无变化,说明使用了预编译头;若编译时间变长,则说明编译器重新编译了原头文件。
4. 使用-v选项查看编译过程日志
-v会输出GCC编译的详细步骤,其中包含预编译头的加载信息。
执行命令:
gcc -v -I/path/to/all.h.gch test.c -o test
在输出的#include "..." search starts here:部分之后,查找是否有found precompiled header之类的提示信息,以此判断预编译头是否被加载。
内容的提问来源于stack exchange,提问作者Sergey U
相关产品推荐
相关产品推荐

