我正在尝试以编程方式在Linux上找到#include
路径,据我所知,在实践中意味着找到GCC认为的路径。 (这是真的吗?Clang怎么做?)
根据http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html,一些组件涉及CPU架构和GCC版本;后者尤其显得棘手;我想它可以通过运行gcc --version
并解析输出(或gcc -v
)来获得,但这看起来不够优雅,最坏的时候也很脆弱。假设一个程序正在使用GCC编译,从一个代码中执行它可能是另一种选择,但它需要取决于该假设。
建议的方法是什么?
答案 0 :(得分:127)
命令
echo | gcc -E -Wp,-v -
将显示正在使用的包含路径。
答案 1 :(得分:17)
我不确定通过推荐的方式查找包含路径的含义。 标准方式如下(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