脚本./configure接受选项--build、--host和--target。阅读了一些帖子和文章后,我仍然不清楚这些选项究竟是什么以及包含哪些软件。
以下是GNU网站上关于这三个术语的摘录:
有三个系统名称是构建知道的:您正在构建的机器(build)、您要构建的机器(host)以及GCC将生成代码的机器(target)。在配置GCC时,您使用--build=、--host=和--target=来指定这些内容。
应避免仅指定主机而不指定构建,因为configure可能会(并曾经)假设您指定的主机也是构建,但这可能不是真实情况。
当使用“building on”或“building for”这一术语时,他们到底指的是什么?从我阅读的帖子中,似乎“building on”是指用于编译调试器或编译器的系统,而主机是运行调试器或编译器的系统。
我在this article中遇到的一个例子让我对“build”正在“构建”的内容感到困惑:
以下是GNU网站上关于这三个术语的摘录:
有三个系统名称是构建知道的:您正在构建的机器(build)、您要构建的机器(host)以及GCC将生成代码的机器(target)。在配置GCC时,您使用--build=、--host=和--target=来指定这些内容。
应避免仅指定主机而不指定构建,因为configure可能会(并曾经)假设您指定的主机也是构建,但这可能不是真实情况。
当使用“building on”或“building for”这一术语时,他们到底指的是什么?从我阅读的帖子中,似乎“building on”是指用于编译调试器或编译器的系统,而主机是运行调试器或编译器的系统。
我在this article中遇到的一个例子让我对“build”正在“构建”的内容感到困惑:
- build:一台powerpc编译机,你将在上面进行所有的编译工作
- host:一台x86笔记本电脑,你将在现场使用它来调试这些设备
- target:多个带有MIPS处理器的嵌入式设备,你的代码将在这些设备上运行
由于PowerPC正在为MIPS设备进行编译,这是否意味着它既是主机也是构建主机?这是否还意味着运行调试软件的系统也归类为主机系统?
根据this article中用户的评论,提到:
- build = 我将编译编译器的地方
- host = 编译器将要运行的地方
- target = 编译器将要生成的代码
这是否意味着运行编译器、链接器和调试工具的系统可以被归类为“主机”?那么“构建”的软件包括什么?
以下是GNU网站上另一个片段:
如果构建、主机和目标都相同,则称为本地。如果构建和主机相同但目标不同,则称为交叉编译。如果构建、主机和目标都不同,则称为加拿大(出于与加拿大政党和当时参与构建的人的背景相关的模糊原因)。如果主机和目标相同,但构建不同,则使用交叉编译器为不同系统构建本地。有些人称之为主机-x-主机、交叉本地或交叉构建本地。如果构建和目标相同,但主机不同,则使用交叉编译器构建交叉编译器,以生成在您正在构建的计算机上运行的代码。这很少见,因此没有通用的描述方式。有一个提议称之为交叉回编。- 本地 - 我的 x86_64 机器是我的本地计算机,我在上面运行和测试我的程序。编译器/链接器(gcc)是在安装操作系统时编译和安装的,我使用 gcc 编译我的代码,并在同一台机器上本地运行。
- 交叉 - 如果我使用同一台 x86_64 机器编译 MIPS 设备的代码,则现在它是交叉编译。x86_64 机器是主机/构建机,MIPS 设备是目标机。
- 加拿大式 - 发布了新版本的 GCC,我决定使用另一台机器(PowerPC2)来编译和测试新的编译器。任何未来的编译器编译都将在此处完成,并在成功测试后部署到我的 x86_64 上。因此,PowerPC2 现在是构建机,X86_64 系统是主机,MIPS 设备是目标机。
- 交叉编译器 - 我们将保持 PowerPC2 作为构建系统,但现在我在同一台 x86_64 主机上编译和运行代码。
- 最后一种设置相当奇怪,它确实表示“没有通用的方法来描述构建和目标相同,但主机不同的情况”。为什么要以这种方式设置系统?