“./configure”选项“–build”,“–host”和“–target”有什么区别?

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

正如在这篇博客文章中提到的,在GCCconfiguration条款中提到的,– --target仅适用于编译工具链的情况。 当你正在交叉编译你使用的库或二进制文件

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

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

让我们说你有:

  • 一个powerpc构build机器,你将要做所有的编译
  • 几个embedded式设备,使用mips处理器,您的代码即将运行
  • 一个x86笔记本电脑,您将用于在现场debugging这些设备

您可以configuration和构build您的debugging服务器(例如gdbserver)以在您的embedded式设备上运行

 ./configure --build=powerpc --host=mips 

这样你就可以在你的embedded式设备上运行“gdbserver:1234 a.out”来开始debugging并监听端口1234。

然后你可以用你的构build你的debugging客户端(连接并控制gdbserver)

 ./configure --build=powerpc --host=i686 --target=mips 

您可以将其复制到x86笔记本电脑,以便在该字段中运行“gdbclient embedded.device:1234”以debugging您的a.out程序。

这一切都适用于编译器,你可能想看看上面的GCC链接或本节关于加拿大交叉编译。

另外请注意,在实际中,您可能看不到指定的build,host或target,因为根据此Autoconf手册页 ,“目标默认为主机,主机构build,并构build到config.guess的结果。

总之,在--build上构build代码,在--target体系结构环境下在--host上运行。

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

  • --build :你正在build造的机器
  • --host :你正在build造的机器
  • --target :GCC将生成二进制文件的机器

从GCC文档 ( 主机/目标具体安装说明 ):

如果构build,主机和目标都相同,则称为本机。 如果构build和主机相同,但目标不同,则称为交叉。 如果build筑,主人和目标完全不同,这就是所谓的加拿大(加拿大政党的模糊理由以及当时build造人员的背景)。 如果主机和目标相同,但构build不同,则使用交叉编译器为不同的系统构build本机。 有些人称这是一个主机x主机,跨越本地,或跨本土。 如果构build和目标相同,但主机不同,则使用交叉编译器来构build交叉编译器,为您正在构build的计算机生成代码。 这很less见,所以没有常用的描述方式。 有一个build议称这是一个交叉。