“./configure”选项“--build”,“ - host”和“--target”的区别是什么?

时间:2011-02-28 07:51:58

标签: cross-compiling option configure autoconf

脚本./configure接受3个选项--build--host--target。我混淆了他们的角色。它们的区别和语义是什么?

2 个答案:

答案 0 :(得分:96)

正如this blog post中所述并GCC Configure Terms中提到的,--target仅在您编译工具链时适用。当您正在对库或二进制文件进行正常的交叉编译时,请使用

--build=the architecture of the build machine
--host=the architecture that you want the file to run on

但是,当 构建工具链时,事情会变得更加复杂。我认为以下是正确的(虽然我不能说我曾经手动编译过交叉调试器):

让我们说你有:

  • 一个powerpc构建机器,您将在
  • 上进行所有编译
  • 几个嵌入式设备,带有mips处理器,您的代码将在
  • 上运行
  • 您将用于在现场调试这些设备的x86笔记本电脑

您可以使用

配置和构建调试服务器(例如gdbserver)以在嵌入式设备上运行
./configure --build=powerpc --host=mips

这样你就可以把你的设备放到你的嵌入式设备上并运行“gdbserver:1234 a.out”来开始调试并监听端口1234.

然后,您将使用

构建调试客户端(连接并控制gdbserver)
./configure --build=powerpc --host=i686 --target=mips 

您将复制到x86笔记本电脑,以便在现场运行“gdbclient embedded.device:1234”以调试您的a.out程序。

这一切都适用于您可能想要查看上面的GCC链接或本节关于Canadian cross编译的编译器。

另请注意,实际上,您可能看不到指定的构建,主机或目标,因为根据this Autoconf manual page,“目标默认为主机,主机构建,并构建为config.guess的结果。 “

总之,在--build上构建代码,在具有--host架构环境的--target上运行代码。

答案 1 :(得分:67)

注意:参数--target仅在构建编译器(例如GCC)时才有意义。在构建GCC之前运行configure

  • --build:您正在构建的计算机
  • --host:您正在构建的计算机
  • --target:GCC将为
  • 生成二进制文件的机器

来自GCC documentationHost/Target specific installation notes):

  

如果构建,主机和目标都相同,则称为本机。如果构建和主机相同但目标不同,则称为交叉。如果构建,主机和目标都不同,则称为加拿大(由于不明原因处理加拿大政党以及当时从事构建工作的人的背景)。如果主机和目标相同,但构建不同,则使用交叉编译器为不同的系统构建本机。有些人称之为host-x-host,cross native或cross-built native。如果构建和目标相同,但主机不同,则使用交叉编译器构建交叉编译器,为您正在构建的机器生成代码。这种情况很少见,因此没有通用的方法来描述它。有人建议将其称为交叉支持。