2013-07-30 65 views
40

我试图以编程方式在Linux上找到#include路径,据我了解,在实践中意味着找到GCC认为它是什么。 (这是真的吗?Clang是怎么做到的?)找出GCC包含的路径是

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

推荐的方法是什么?

回答

82

命令

echo | gcc -E -Wp,-v - 

将显示在使用中的包含路径。

+1

bash上的哪个gcc命令做同样的事情? – 2013-07-30 07:38:16

+3

@WedaPashi:No. – caf

+0

'echo |'必要吗? –

15

我不确定你的意思是建议用的方式找到包含路径。所述标准方式是如下面给出的(对于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