脚本./configure
接受3个选项--build
,--host
和--target
。我混淆了他们的角色。它们的区别和语义是什么?
答案 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
但是,当 构建工具链时,事情会变得更加复杂。我认为以下是正确的(虽然我不能说我曾经手动编译过交叉调试器):
让我们说你有:
您可以使用
配置和构建调试服务器(例如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 documentation(Host/Target specific installation notes):
如果构建,主机和目标都相同,则称为本机。如果构建和主机相同但目标不同,则称为交叉。如果构建,主机和目标都不同,则称为加拿大(由于不明原因处理加拿大政党以及当时从事构建工作的人的背景)。如果主机和目标相同,但构建不同,则使用交叉编译器为不同的系统构建本机。有些人称之为host-x-host,cross native或cross-built native。如果构建和目标相同,但主机不同,则使用交叉编译器构建交叉编译器,为您正在构建的机器生成代码。这种情况很少见,因此没有通用的方法来描述它。有人建议将其称为交叉支持。