确定在哪里找到头文件

时间:2018-08-16 14:17:12

标签: c gcc clang

当我使用gcc -v hello.c * 进行编译时,输出将显示#include的搜索路径:

$ gcc -v hello.c
Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
...
clang -cc1 version 9.1.0 (clang-902.0.39.2) default target x86_64-apple-darwin17.7.0
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Library/Developer/CommandLineTools/usr/lib/clang/9.1.0/include
 /Library/Developer/CommandLineTools/usr/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

是否可以确定使用哪个位置?例如,假设hello.c包含#include <stdio.h>。我可以手动看到多个位置的stdio.h版本,大概可以使用不同的函数构造:

$ find /usr/local/include -name "stdio.h"
/usr/local/include/c++/5.5.0/tr1/stdio.h

$ find /Library/Developer/CommandLineTools/usr/include -name "stdio.h"
/Library/Developer/CommandLineTools/usr/include/c++/v1/stdio.h

$ find /usr/include -name "stdio.h"
/usr/include/c++/4.2.1/tr1/stdio.h
/usr/include/sys/stdio.h
/usr/include/stdio.h

在Python中,这类似于:

>>> import math
>>> math.__file__
'/Users/brad/miniconda3/lib/python3.6/lib-dynload/math.cpython-36m-darwin.so'

*我在Macbook上,所以gcc实际上似乎路由到clang,尽管它似乎是真正的可执行文件而不是符号链接。

1 个答案:

答案 0 :(得分:6)

gcc man页上:

  

-H

     

除了其他常规活动外,还打印所使用的每个头文件的名称。每个名称都缩进以显示其在#include堆栈中的深度。即使发现预编译的头文件无效,它们也会被打印。无效的预编译头文件用... x打印,有效的头文件用...!打印。 。