C++ 将目录传递给g++;包括文件
我已经在aws.ami linux上从源代码处编译了gcc 5.3.0,以进一步了解整个开发编译链。我已经搜索了几个小时的线程数,并没有找到正确的组合,以了解到底发生了什么 查看.configure--help,我设置了标志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:
--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