Dre*_*ann 212
`gcc -print-prog-name=cc1plus` -v
Run Code Online (Sandbox Code Playgroud)
这个命令询问gcc 它正在使用哪个C++预处理器,然后询问它所寻找的预处理器包括什么.
您将获得特定设置的可靠答案.
同样,对于C预处理器:
`gcc -print-prog-name=cpp` -v
Run Code Online (Sandbox Code Playgroud)
小智 36
此外,gcc将查看-I选项后指定的目录.
dic*_*ciu 24
您可以创建一个尝试包含伪造系统标头的文件.如果在这样的源上以详细模式运行gcc,它将列出所有系统包含的位置,因为它查找伪造的头.
$ echo "#include <bogus.h>" > t.c; gcc -v t.c; rm t.c
[..]
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
[..]
t.c:1:32: error: bogus.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Bil*_*ard 17
GCC在几个不同的地方寻找标题.在普通的Unix系统上,如果你不指示它,它将在#include中寻找请求的头:
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
Run Code Online (Sandbox Code Playgroud)
对于C++程序,它首先也会查看/ usr/include/g ++ - v3.
要让GCC打印出它将查找系统头的完整目录集,请像这样调用它:
$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 |
LC_ALL=C sed -ne '/starts here/,/End of/p'
Run Code Online (Sandbox Code Playgroud)
这将产生表格的输出
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Run Code Online (Sandbox Code Playgroud)
如果-I在命令行上有-family选项,它们将影响打印出来的内容.
(该sed命令是为了摆脱这个调用所打印的所有其他垃圾,并且LC_ALL=C确保该sed命令有效 - "从这里开始"和"搜索结束列表"短语被翻译成IIRC.)
可以通过以下命令检查编译器查找头文件的路径集:-
cpp -v
如果声明#include "",编译器首先在源文件的当前目录中搜索,如果没有找到,则继续在上述检索到的目录中搜索。
如果声明#include <>,编译器将直接在从上述命令获得的那些目录中搜索。
来源:- http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026
小智 7
g++ -print-search-dirs
gcc -print-search-dirs
Run Code Online (Sandbox Code Playgroud)