18.6.3主机和交叉编译

基于编译器作者的经验,经过长时间公开争论中,交叉编译链的许多方面都发生了变化:


已清理生成、主机和目标之间的关系:默认链现在很简单:目标默认为主机,主机默认为生成,并生成结果配置猜测尽管如此,为了简化从2.13到2.50的过渡,请执行以下操作实现了过渡方案。不要依赖它,因为它会在几个版本中完全禁用(我们不能保留它,因为它导致的问题比治愈的问题多)。

它们都默认为运行结果配置猜测,除非您可以指定--建造--主机在这种情况下,默认值成为您指定的系统类型。如果同时指定两者,它们是不同的,配置进入交叉编译模式,因此它不运行任何需要执行的测试。

提示:如果您打算覆盖配置猜测,更喜欢--建造结束--主机.


为了向后兼容,配置接受系统键入作为选项。这样的选项会覆盖构建、主机和目标系统类型的默认值。以下内容configure语句配置在其上运行的跨工具链NetBSD/alpha但为GNU Hurd/sparc生成代码,这也是构建平台。

./configure--host=alpha-netbsd sparc-gnu

在Autoconf 2.13及更早版本中,变量建造,主办,目标调用AC_CANONICAL_BUILD公司等等,现在--建造严格复制到构建别名,左为否则为空。AC_CANONICAL_BUILD公司,建造设置为规范化的生成类型。为了简化过渡,其内容与构建别名.执行依赖于这个断裂的特征。

为了与上述向后兼容方案保持一致,什么时候--主机已指定,但--建造不是,建造假设系统与--主机、和构建别名'设置为该值。最终,这个历史上的错误行为将会消失。


前一种支持交叉编译的方案被证明会带来更多危害特别是,它过去太容易被触发,导致普通终端用户在隐秘的错误消息面前感到困惑。配置甚至只能进入交叉编译模式因为编译器不起作用。这主要是因为配置用于尝试检测交叉编译,而不是等待用户的显式标志。

现在,配置当且仅当--主机已通过。

这是简短的文档。为了简化2.13和它的后继者是一个更复杂的方案。不要依赖以下内容,因为它将在不久的将来被移除。

如果您指定--主机,但不是--建造,何时配置执行它尝试运行的第一个编译器测试编译器生成的可执行文件。如果执行失败进入交叉编译模式。这是易碎的。而且,到那时执行编译器测试时,修改构建系统类型:可能已经执行了其他测试。因此,每当您指定--主机,请务必指定--建造也是。

./configure--build=x86_64-pc-linux-gnu--host=x86=64-w64-mingw64

进入交叉编译模式。前一个接口包括在不通知的情况下将编译器设置为交叉编译器配置已过时。例如,配置如果无法运行指定编译器生成的代码,则失败配置如下:

./configure CC=x86_64-w64-mingw64-gcc