如何在不查看GCC预处理后的代码的情况下知道包含了哪些头文件?

9
我有一些很大的C程序,我想知道在编译这个程序时,哪些头文件实际上被包含了... 最简单的解决方案是打印预处理代码并查看,但您是否知道是否有一种方法可以同时编译和显示包括哪些头文件?
4个回答

15

使用-M选项输出依赖关系。使用-MD选项生成并编译。使用-MF将输出写入特定文件。

此外,-MM选项可忽略在依赖项列表中的系统文件。

gcc ... -M  -MF <output_file>     # generate dependencies
gcc ... -MD -MF <output_file>     # compile and generate dependencies

但从手册中可以看出:向驱动程序传递 -M 意味着 -E,并使用隐式的 -w 抑制警告。因此,该程序实际上并没有被编译。 - LB40
是的,您必须使用-MD选项同时编译并生成依赖关系。 - philant
现在的情况是(我不知道2009年是否适用),你也可以使用-H。这将以层次结构呈现头文件,因此您可以查看哪个头文件包含了其他头文件,深入到任意深度。这有时可能很有启发性 - 特别是如果您的项目直接在#include行中或通过命令行上的-I选项使用../somedir/someheader.h符号。同一文件可以由多个不同的路径包含。 - Jonathan Leffler

5
您可以使用-MD选项 - 有关详细信息,请参见man gcc

0
增加gcc的详细程度,然后通过自己制作的过滤程序运行它?

0
使用gcc -M或gcc -MM命令。如果需要,您可以用sed调整输出。如果您使用GNU make(而且您应该这样做),则可以将其封装为一个简洁的单一命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接