正确的标志将目录传递给 G++ 以包含文件
correct flag to pass directory to g++ to include files
我已经在 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
.这个变量和它的同伴(CFLAGS
、CXXFLAGS
、LDFLAGS
等(会影响编译器的行为,当它构建您的新 GCC。它们对您构建的新编译器的行为没有影响。
在使用 C 和 C++ 的典型安装中(撇开其他支持的语言不谈(,GCC 包含各种合作工具,用于编译、组装和链接程序这些语言加上标准库的实现那些语言。工具的安装位置,二进制文件标准库和标准库的头文件都主要是由(指定或默认(--prefix
配置选项控制,从而建立标准关系在所有这些安装位置之间维护。
不要依赖./configure help
来安装 GCC。从海湾合作委员会维基开始,安装 GCC。仔细阅读该页面并根据需要点击链接,包括安装 GCC:配置。我特别推荐你看那页上的这些话:
选项规范
使用选项覆盖 GCC 的多个配置时间选项。以下是支持的选项列表; "配置 --help"可能会列出其他选项,但下面未列出的选项可能不起作用,通常不应使用。
(我的强调(
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到