C++ 将目录传递给g++;包括文件

C++ 将目录传递给g++;包括文件,c++,linux,c++11,gcc,g++,C++,Linux,C++11,Gcc,G++,我已经在aws.ami linux上从源代码处编译了gcc 5.3.0,以进一步了解整个开发编译链。我已经搜索了几个小时的线程数,并没有找到正确的组合,以了解到底发生了什么 查看.configure--help,我设置了标志--includedir=/home/mybin/include,并使用安装目录的微调下的所有标志编译了程序,没有错误: 当我编译一个通过g++-v test.cc的程序时,我看到默认情况下编译器正在查找 #include "..." search starts here:

我已经在aws.ami linux上从源代码处编译了gcc 5.3.0,以进一步了解整个开发编译链。我已经搜索了几个小时的线程数,并没有找到正确的组合,以了解到底发生了什么

查看.configure--help,我设置了标志
--includedir=/home/mybin/include
,并使用安装目录的
微调下的所有标志编译了程序,没有错误:

当我编译一个通过
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.
您(可以理解)误解了的
--includedir
参数的功能
/配置
。这是GNU autotools
/configure
脚本的标准参数, 不仅仅是GCC。对于下的所有其他
/configure
选项,如果为true,则相同 标题
安装目录的微调
。它们是样板。
--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不是与程序链接的库。你不知道
#在源代码中包含任何类似“GCC API”的内容<代码>--includedir
不相关

对于您的问题
Q3
,您还对
/configure
变量的功能感到困惑,
CPPFLAGS
。此变量及其同伴(
CFLAGS
cxflags
LDFLAGS
等)影响 编译器运行时已有的编译器行为 构建新的GCC。它们对您构建的新编译器的行为没有影响

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

不要依赖
/configure help
来安装GCC。从GCC维基开始, . 仔细阅读那一页,仔细阅读 按照您认为必要的链接进行操作,包括。 我特别向你提及该页上的以下文字:

选项规范

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


(我的重点)

谢谢你的清晰总结,这有助于理解工作原理,艺术
#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