autotools - 交叉编译和构建本地中间构建程序
autotools - crosscompiling and building native intermediate building programs
我现在正在重组 autotools 项目 lnav 以使用 yocto 构建。这意味着 lnav 本身必须交叉编译,而一些辅助程序必须本地构建。
我已经找到这个线程 this thread,但是第一个提出的解决方案不起作用,而第二个对项目结构有很大的侵入性。
有人可以提示我如何解决这个问题吗?也许告诉我哪些 AC/AM 宏可以完成这项工作或从哪里获得一个好的例子。
如果您需要为不同的执行主机构建不同的部分,那么最简洁的方法是分别构建构建工具。您 linked 的其中一个答案描述了执行此操作的方法。但是,如果您有一个编写良好的 Autotools 构建系统,那么您可以通过利用源外构建来以不同的方式解决这个问题。这可以编写脚本。
创建一个用于构建工具的目录。在该目录中,配置构建系统 (path-to-source-dir/configure
),然后构建(仅)所需的工具。然后在源目录或不同的源外构建目录中,通过将适当的 --build
和 --host
三元组指定为 configure
、复制或 [=26 来配置交叉编译=] 将已经构建好的工具放到构建目录下,执行剩下的构建。
如果构建系统特别精心制作,那么您可能需要克服不同主机上构建工具的不同可执行扩展的规定。如果你需要这样做,并且你打算编写两阶段交叉编译的脚本,那么当你 copy/link 工具时,你可能可以处理这个问题;这将避免任何需要将对它的特殊支持写入核心构建系统。
为了支持一般的交叉编译,configure.ac
应该使用 AC_CANONICAL_BUILD
和 AC_CANONICAL_HOST
宏,构建机器需要安装适当的交叉编译工具链。
我现在正在重组 autotools 项目 lnav 以使用 yocto 构建。这意味着 lnav 本身必须交叉编译,而一些辅助程序必须本地构建。
我已经找到这个线程 this thread,但是第一个提出的解决方案不起作用,而第二个对项目结构有很大的侵入性。
有人可以提示我如何解决这个问题吗?也许告诉我哪些 AC/AM 宏可以完成这项工作或从哪里获得一个好的例子。
如果您需要为不同的执行主机构建不同的部分,那么最简洁的方法是分别构建构建工具。您 linked 的其中一个答案描述了执行此操作的方法。但是,如果您有一个编写良好的 Autotools 构建系统,那么您可以通过利用源外构建来以不同的方式解决这个问题。这可以编写脚本。
创建一个用于构建工具的目录。在该目录中,配置构建系统 (path-to-source-dir/configure
),然后构建(仅)所需的工具。然后在源目录或不同的源外构建目录中,通过将适当的 --build
和 --host
三元组指定为 configure
、复制或 [=26 来配置交叉编译=] 将已经构建好的工具放到构建目录下,执行剩下的构建。
如果构建系统特别精心制作,那么您可能需要克服不同主机上构建工具的不同可执行扩展的规定。如果你需要这样做,并且你打算编写两阶段交叉编译的脚本,那么当你 copy/link 工具时,你可能可以处理这个问题;这将避免任何需要将对它的特殊支持写入核心构建系统。
为了支持一般的交叉编译,configure.ac
应该使用 AC_CANONICAL_BUILD
和 AC_CANONICAL_HOST
宏,构建机器需要安装适当的交叉编译工具链。