gpt4 book ai didi

cmake - 如何处理具有 cmake 依赖性的 autotools 项目?

转载 作者:行者123 更新时间:2023-12-05 05:10:08 25 4
gpt4 key购买 nike

我有一个 autotools C 项目需要使用另一个用 CMake 构建的库。它们是否等同于可与 CMake 一起使用的 AC_CONFIG_SUBDIRS?

最佳答案

我认为您想配置和构建基于 CMake 的项目作为配置和构建基于 Autotools 的宿主项目的一部分。这是可能的,并且有几种可行的方法可以做到这一点,但我不知道像 AC_CONFIG_SUBDIRS 这样完全预打包的东西是用于基于 Autotools 的子项目。

用于配置

选项 1 - 配置命令

Autoconf 提供 a group of macros您可以通过它为 configure 或生成的要运行的 config.status 脚本指定自定义命令。您可以使用其中之一——可能是 AC_CONFIG_COMMANDS,但也可能是 AC_CONFIG_COMMANDS_POST——在子项目中运行 cmake(以及任何需要的准备步骤) .就个人而言,我最喜欢这个选项。

选项 2 - 粘合脚本

AC_CONFIG_SUBDIRS 指示 configure 在指定的子目录中运行 configure 脚本,但那些其他 configure 脚本不不需要由 Autotools 生成。您可以想象在子项目目录中编写一个名为“configure”的自定义包装脚本,以便父级 configure 运行,但它本身会执行对 cmake< 的适当调用。顶层配置中的 AC_CONFIG_SUBDIRS 应该会在正确的时间运行该脚本。

选项 3 - 自定义代码

我认为 Autoconf 已经为您似乎想要的东西提供了足够的支持,但是如果您不这么认为,那么您总是可以选择通过 configure 将您想要的任何 shell 代码写入 configure。交流。您可能会发现为此编写一个自定义宏是值得的,尤其是当您有多个 CMake 子项目时,但这不是强制性的。请注意,此类命令与通过 AC_CONFIG_COMMANDS & co 指定的命令不同。根据执行时间。

用于建筑

大概您将在构建和安装步骤中依赖递归 make。无论您使用的是基于 Automake 的 Makefile.in 还是在顶层手动滚动的,完成这项工作都不难。

选项 1 - Automake + glue makefile

在您的顶级 Makefile.am 中使用一个 SUBDIRS 变量来指示 make 递归到 CMake 项目的子目录中,就像您一样会做任何其他项目的。在那里编写一个简单的 Makefile,递归到 build 子目录(您必须确保它是由 configure 创建和配置的)。这不应与子项目冲突,因为它假定使用了单独的构建目录。 glue makefile 可以调整目标和 make 变量以满足子项目构建系统的期望。

Automake 文档描述了 all the recursive targets顶层 Autotools makefile 可能会尝试递归构建,而 glue makefile 应该提供所有这些——尽管可能有很多只需要一个虚拟(但不是空的)配方。

选项 2 - 手动顶层 Makefile.in

另一方面,如果您使用的是手动顶层 Makefile 模板,那么您可以完全控制递归 make 调用。在这种情况下,您仍然可以在子项目中使用粘合 makefile,但直接适应预期的 CMake 生成的 makefile 可能更容易、更清晰。

关于cmake - 如何处理具有 cmake 依赖性的 autotools 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com