我希望能够在编译时查看实际包含哪个标头。例如,我有两个非常不同的 check.h 文件(一个是 linux-header 的东西,另一个来自单元测试系统)。
gcc 或某些语言命令/宏中是否有设置可以显示包含头文件的位置?
您可以使用该-E
标志。
gcc -E source.c
这将向您显示“带注释”的预处理源,包括包含使用的标头的绝对路径和包含使用<>
的标头的相对路径""
。请记住,这将是一个艰难的过程,特别是如果您包含很多系统头文件(这些头文件又包括特定于实现的头文件等)。
使用 grep,您可以通过以下方式过滤这些结果:
gcc -E source.c | grep '^# 1 '
这# n
是一个注释,描述当前包含的文件的行号,它始终# 1
位于文件的开头。
您可以尝试添加-MD
到您的编译命令。这会生成一个依赖文件(适用于 Make),它将告诉您源代码所依赖的所有包含文件。
这可以添加到现有的编译命令中,而不必担心破坏编译,因为它会生成依赖文件作为正常编译的副作用。