【问题标题】:correct flag to pass directory to g++ to include files将目录传递给 g++ 以包含文件的正确标志
【发布时间】:2016-07-13 16:16:36
【问题描述】:

我在 aws.ami linux 上从源代码编译了 gcc 5.3.0,以了解有关整个开发编译链的更多信息。我已经搜索了几个小时的多个线程,但没有找到正确的组合来准确了解发生了什么。

查看.configure --help,我设置了标志--includedir=/home/mybin/include并使用Fine tuning of the installation directories:下的所有标志编译程序没有错误

当我编译一个传递 g++ -v test.cc 的程序时,我看到默认情况下编译器正在查找

#include "..." search starts here:
#include <...> search starts here:
/home/mybin/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include
/usr/local/include
/home/mybin/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include-fixed
/usr/include
End of search list.

用于包含map &amp; iostream等程序。

Q1:为什么 -v 输出在搜索中不显示 --includedir。我注意到它确实会在那里寻找#include 程序。

Q2:我注意到当make install 发生时,它没有将文件从编译tmp 目录/home/tmp/gcc-5.3.0/libstdc++-v3/include/std/.... 复制到--includedir。是否有一个标志我错过了让它将这些文件转储到该目录中?

Q3:还使用--help 输出我设置了CPPFLAGS="-I/home/anotherBin" 来测试它是否会扫描此目录以查找其他包含文件。但是,它似乎不起作用。 所以我尝试了以下每一项都没有成功,设置正确的标志是什么?

LDFLAGS="-L/home/anotherBin"     
        linker flags, e.g. -L<lib dir> if you have libraries in a               nonstandard directory <lib dir>
  LIBS="-l/home/anotherBin"
           libraries to pass to the linker, e.g. -l<library>

【问题讨论】:

    标签: c++ linux c++11 gcc g++


    【解决方案1】:

    您(可以理解)误解了--includedir 参数的功能 ./configure。这是 GNU autotools ./configure 脚本的标准参数, 不只是 GCC 的。如果所有其他 ./configure 选项为真,则相同 标题Fine tuning of the installation directories。它们是样板文件。 --includedir 参数指定在其中安装 包含已安装库的 API 的头文件 由脚本。因此,例如如果你为一个库制作了一个 autotools 包 libfoobar你写的,我决定安装包

    ./configure --includedir=/usr/local/include/foobar --libdir=/usr/local/lib/foobar
    

    然后当我使用libfoobar 编译和链接程序时:

    ma​​in.c

    #include <foobar.h>
    
    int main(void)
    {
        foo();
        bar();
        return 0;
    }
    

    我必须这样做:

    gcc -I/usr/local/include/foobar -c -o main.o main.c
    gcc -o prog main.o -L/usr/local/lib/foobar -lfoobar
    

    GCC 不是与程序链接的库。你不 #include 源代码中的任何诸如“GCC API”之类的东西。 --includedir 不相关。

    在您的问题Q3 的情况下,您也对./configure 变量的功能感到困惑, CPPFLAGS。这个变量及其伙伴(CFLAGSCXXFLAGSLDFLAGS 等)影响 你已经拥有的编译器的行为 构建你的新 GCC。它们对您构建的新编译器的行为没有影响。

    在使用 C 和 C++ 的典型安装中(不考虑其他支持的语言), GCC包含各种用于编译、组装和链接程序的协作工具 这些语言加上标准库的实现 那些语言。工具的安装位置,二进制文件 标准库和标准库的头文件都主要是 由(指定或默认)--prefix 配置选项控制,其中标准关系 在所有这些安装位置之间进行维护。

    不要依赖./configure help 来安装 GCC。从 GCC Wiki 开始, Installing GCC。仔细阅读该页面并 如有必要,请点击链接,包括Installing GCC: Configuration。 我特别向您推荐该页面上的这些文字:

    选项规范

    使用选项覆盖 GCC 的多个配置时间选项。支持的选项列表如下; ‘configure --help’可能会列出其他选项,但下面未列出的选项可能不起作用,通常不应使用

    (我的重点)

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2018-04-14
      相关资源
      最近更新 更多