我在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>
答案 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
。此变量及其变体(CFLAGS
,CXXFLAGS
,LDFLAGS
等)会影响
你已经拥有的编译器的行为
建立新的GCC 。它们对您构建的新编译器的行为没有影响。
在使用C和C ++的典型安装中(不考虑其他支持的语言),
GCC包括各种合作工具,用于编译,汇编和链接程序
这些语言加上标准库的实现
那些语言。工具的安装位置,二进制文件
标准库和标准库的头文件都是主要的
由(指定或默认)--prefix
配置选项控制,由此建立标准关系
在所有这些已安装的位置之间进行维护。
不要依赖./configure help
来安装GCC。从GCC Wiki开始,
Installing GCC。仔细阅读该页面
按照您认为必要的链接进行操作,包括Installing GCC: Configuration。
我特别推荐你在那个页面上的这些文字:
选项规范
使用选项覆盖GCC的多个配置时间选项。以下是支持的选项列表; 'configure --help'可能会列出其他选项,但下面未列出的选项可能无效,通常不应使用。
(我的重点)