“./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议称这是一个交叉。