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

时间:2016-03-25 20:55:30

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

我在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等包含程序。

Q1:为什么-v输出在搜索中不显示--includedir。我注意到它确实适用于#include程序。

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

问题3:同样使用--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>

1 个答案:

答案 0 :(得分:0)

你(可以理解)误解了--includedir参数的功能 ./configure。这是GNU autotools ./configure脚本的标准参数, 不仅仅是海湾合作委员会。对于所有其他./configure选项,如果相同,则相同 标题Fine tuning of the installation directories。它们是样板。 --includedir参数指定要在其中安装的非默认目录 包含已安装的库或库的API的头文件 通过脚本。例如,如果您为库创建了一个autotools包 您编写的libfoobar,我决定使用

安装该软件包
./configure --includedir=/usr/local/include/foobar --libdir=/usr/local/lib/foobar

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

<强>的main.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 {GAC API&#34;在你的源代码中。 --includedir 没有关系。

对于您的问题Q3,您对./configure变量的功能感到困惑, CPPFLAGS。此变量及其变体(CFLAGSCXXFLAGSLDFLAGS等)会影响 你已经拥有的编译器的行为 建立新的GCC 。它们对您构建的新编译器的行为没有影响。

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

不要依赖./configure help来安装GCC。从GCC Wiki开始, Installing GCC。仔细阅读该页面 按照您认为必要的链接进行操作,包括Installing GCC: Configuration。 我特别推荐你在那个页面上的这些文字:

  

选项规范

     

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

(我的重点)