91

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

根据http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html一些组件涉及 CPU 架构和 GCC 版本;后者尤其显得棘手;我想它可以通过运行gcc --version和解析输出(或gcc -v)来获得,但这似乎充其量是不雅的,最坏的情况是脆弱的。假设一个人的程序是用 GCC 编译的,从一个人的代码中执行它可能是另一种选择,但它需要取决于这个假设。

推荐的方法是什么?

4

2 回答 2

181

命令

echo | gcc -E -Wp,-v -

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

于 2013-07-30T06:58:26.753 回答
27

我不确定您推荐的查找包含路径的方法是什么意思。标准方式如下(对于 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
于 2013-07-30T06:55:47.853 回答