【问题标题】:Finding out what the GCC include path is [duplicate]找出 GCC 包含路径是什么 [重复]
【发布时间】:2013-07-30 04:20:51
【问题描述】:

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

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

推荐的方法是什么?

【问题讨论】:

    标签: c linux gcc c-preprocessor


    【解决方案1】:

    命令

    echo | gcc -E -Wp,-v -
    

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

    【讨论】:

    • bash 上的which gcc 命令是否做同样的事情?
    • echo | 有必要吗?
    • cpp -Wp,-v 命令等待一些输入。 echo | 保存需要Ctrl + DCtrl + C 的用户返回shell。
    • echo | cpp -xc++ -Wp,-v 将提供 C++ 包含路径。
    • gcc -E -Wp,-v -xc /dev/null g++ -E -Wp,-v -xc++ /dev/null)
    【解决方案2】:

    我不确定您所说的 推荐 方法是什么意思来查找包含路径。 标准方式如下(针对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
    

    【讨论】:

    • 那么,哪一个是确切的路径?
    • @jay C和C++的include路径不同,注意prog-name。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多