2017-04-27 81 views
0

我现在正在研究重构autotools项目lnav可以使用yocto构建。这意味着lnav本身必须进行交叉编译,而一些帮助程序必须本地构建。autotools - 交叉编译和构建本地中间构建程序

我已经找到这个线程this thread,但是第一个建议的解决方案不起作用,而第二个是对项目结构的严重侵入。

有人可以给我一个提示如何解决这个问题吗?也许告诉我哪些AC/AM宏可以做这项工作,或者在哪里获得一个很好的例子。

+0

我不确定我了解问题的性质。为什么你需要在同一个版本中为不同的主机类型构建组件?这些助手是否只支持*构建*,或者它们是可安装的包? –

+0

@john是的,你是对的。这些帮助程序仅用于构建,而不是安装在目标上。 –

回答

1

如果您需要为不同的执行主机构建不同的组件,那么最简单的方法是单独构建构建工具。你链接的答案之一描述了一种方法来做到这一点。然而,如果你有一个精心编写的Autotools构建系统,那么你可以通过利用out-of-source构建来解决这个问题。这可以编写脚本。

创建一个目录,在其中构建工具。在该目录中,配置构建系统(path-to-source-dir/configure),然后构建(只)所需的工具。然后在源目录或另一个源外编译目录中,通过指定适当的--build--host三元组到configure来配置交叉编译,将已经构建的工具复制或链接到构建目录中,并执行其余的构建。

如果构建系统特别精心制作,那么您可能需要针对不同主机上构建工具的不同可执行扩展的规定。如果你需要这样做,并且你打算编写两段式交叉编译脚本,那么当你复制/链接工具时,你可能会处理这个问题。这将避免任何需要为其核心构建系统写入特殊支持。

为了支持交叉编译一般来说,configure.ac应该使用AC_CANONICAL_BUILDAC_CANONICAL_HOST宏和构建机器需要安装合适的交叉编译工具链。

+0

感谢提示;) –