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

Eon*_*nil 112 autoconf configure cross-compiling option

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

小智 103

本博客文章中所述并在GCC配置条款中提到,--target仅适用于编译工具链时.当您正在对您使用的库或二进制文件进行正常的交叉编译时

--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Run Code Online (Sandbox Code Playgroud)

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

让我们说你有:

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

您可以配置和构建调试服务器(例如gdbserver)以在嵌入式设备上运行

./configure --build=powerpc --host=mips
Run Code Online (Sandbox Code Playgroud)

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

然后,您将构建调试客户端(连接并控制gdbserver)

./configure --build=powerpc --host=i686 --target=mips 
Run Code Online (Sandbox Code Playgroud)

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

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

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

总之,在构建代码--build,运行它--host--target建筑环境.

  • 如何找出"主持人"和"目标"的内容? (6认同)
  • 我想你正在谈论构建一个新的编译器,因为"--target"只与编译器有关.*"host"是新编译器应运行的位置.*"target"是新编译器生成的可执行文件应运行的位置. (3认同)

Del*_*ani 72

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

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

GCC文档(主机/目标特定安装说明):

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

  • 这显然意味着`--target`与任何本身不是编译器的项目无关.那为什么它是标准的配置选项呢?混乱. (2认同)