找出GCC包含的路径是什么

rwa*_*ace 64 c linux gcc c-preprocessor

我正在尝试以编程方式#include在Linux上找到路径,据我所知,在实践中意味着找到GCC认为它的内容.(这是真的吗?Clang怎么做?)

根据http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html,一些组件涉及CPU架构和GCC版本; 后者尤其显得棘手; 我想它可以通过运行gcc --version和解析输出(或gcc -v)来获得,但这看起来不够优雅,最糟糕的是脆弱.假设一个程序正在使用GCC编译,从一个代码中执行它可能是另一种选择,但它需要依赖于该假设.

建议的方法是什么?

caf*_*caf 134

命令

echo | gcc -E -Wp,-v -
Run Code Online (Sandbox Code Playgroud)

将显示正在使用的包含路径.

  • `gcc -E -Wp,-v -xc/dev/null` < - 这个版本不需要任何shell(对于C++使用`g ++ -E -Wp,-v -xc ++/dev/null`) (9认同)
  • `echo | cpp -xc ++ -Wp,-v`将给出C++包含路径. (5认同)
  • @WedaPashi:不. (3认同)
  • `cpp -Wp,-v`命令等待一些输入.`echo |`保存需要`Ctrl + D`或`Ctrl + C`的用户返回shell. (3认同)
  • `echo |` 是必要的吗? (2认同)

dev*_*ull 18

我不确定你的推荐方法是什么意思找到包含路径.的标准是如以下给出(对于C和C++)的方法:

$ `gcc -print-prog-name=cc1` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include
End of search list.
^C
$ `gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.7
 /usr/include/c++/4.7/x86_64-linux-gnu
 /usr/include/c++/4.7/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include
End of search list.
^C
Run Code Online (Sandbox Code Playgroud)