正确的标志将目录传递给 G++ 以包含文件

correct flag to pass directory to g++ to include files

本文关键字:G++ 文件 包含 标志      更新时间:2023-10-16

我已经在 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 & iostream等程序。

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

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

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

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>

您(可以理解地(误解了 --includedir 参数的功能 ./configure .这是 GNU 自动工具./configure脚本的标准参数,不仅仅是海湾合作委员会。如果对于以下所有其他./configure选项为真,则相同标题Fine tuning of the installation directories .它们是样板。--includedir 参数指定要在其中安装包含一个或多个已安装库的 API 的头文件通过脚本。因此,例如,如果您为库制作了自动工具包 libfoobar你写的,我决定安装这个包

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

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

主.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。仔细阅读该页面并根据需要点击链接,包括安装 GCC:配置。我特别推荐你看那页上的这些话:

选项规范

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

(我的强调(