所以似乎有很多关于 Autotools 与 CMake 的文章,但对于我的生活,我似乎无法找到一个关于如何将项目从 Autotools(Makefile.am和configure.ac文件)转换为 CMake(CMakeLists.txt文件)。如何做到这一点?
2 回答
没有自动化工具可以将任意构建系统从 autotools 转换为 cmake。我已经手动转换了一些中等规模的项目。我喜欢CMakeLists.txt为每组configure.ac和/或Makefile.am文件创建一个文件,以简化从 autotools 到 cmake 的转换。  
可悲的是,这种手动方法需要在两个系统中培养专业知识,其中任何一个都不应该强加给任何无辜者。
- 捕获自动工具构建在您的机器上实际执行的操作的记录。这将帮助您验证您的 CMake 构建系统是否使用相同的编译标志实际编译每个文件,并创建 autotools 执行的每个库和可执行文件;至少在你的机器上,有你的选择。 - % ./configure [配置选项] > configure_autotools.log - % 制作 > make_autotools.log - % 安装 > make_install_autotools.log 
- 在每个包含 - configure.acor- Makefile.am文件的目录中,包括项目根目录,创建一个新的空 CMakeLists.txt 文件。将 cmake- add_subdirectory(...) 命令添加到每个非叶 CMakeLists.txt 文件中,以将所有 cmake 文件以树状结构链接在一起。将 cmake project() 和 cmake_minimum_required() 命令添加到顶级 CMakeLists.txt 文件的顶部。- project(MyProject) cmake_minimum_required(VERSION 2.8) add_subdirectory(foo)
- 您现在拥有一个一致但无用的 cmake 构建系统,它什么都不做。暂时在更深的 CMakeLists.txt 文件中添加一些 - message(...)命令,以验证所有内容是否正确连接。请记住,- message()在调试 cmake 配置问题时,这是您的朋友。立即尝试构建以确保您的 cmake 基础架构正常工作。什么都不会被建造或安装;但此时使用 cmake 基础设施是很有价值的。- % mkdir build_cmake - % cd build_cmake - % ccmake -i [你的项目根目录] - [配置,配置,生成] - % 使 VERBOSE=1 - % 进行安装 
- 这是困难的部分。一个一个地填充您的 CMakeLists.txt 文件。以下是一些指导方针: - 打开两个并排的编辑器,一个带有 CMakeLists.txt 文件,另一个带有相应的 Makefile.am/configure.ac 文件。 
- 让您的浏览器打开cmake 命令文档。 
- 与其从最顶层开始,不如从创建用于构建小型库或可执行文件的 cmake 规则开始,如果您可以在项目中找到一个(cmake - add_library()或- add_executable())。使用这种方法,您可以一次建立一个转换。
- 添加每个目标时,请定期测试您的 cmake 构建系统。 
- 我喜欢使用 cmake - file(GLOB ...)命令来紧凑地创建源文件列表。请注意,这是一个有争议的观点。
- 许多常见的 autotools 节都有相应的CMake 命令。例如 autoconf AC_TRY_COMPILE可以转换为 cmake TRY_COMPILE。但大多数情况下,我发现我必须了解每个小 autotools 节的作用,并弄清楚如何编写相应的 cmake。此外,还有一系列 CMake 模块可帮助创建类似 autotools 的 config.h 文件。Makefile.am 文件通常更容易转换,并且在转换为 cmake 后实际上可以变得更紧凑。 
- 将您的 cmake 构建结果与您在步骤 1 中捕获的 autotools 日志进行比较。编译标志是否相同?是否构建了所有相同的目标?是否安装了相同的文件? 
- 不幸的是,我最近还没有将 autotools 转换为 cmake,所以我无法写一个全面的“如果您在 Makefile.am 中看到 x,请在 CMakeLists.txt 中写入 y”。有人可以建议一个公共 wiki 的好位置,积极从 autotools 转换为 cmake 的人们可以积累一套全面的此类指南吗?我不确定这个 stackoverflow 答案是否是此类列表的最佳位置... 
 
- 为了获得额外的功劳,一旦您完成了所有工作,请调整您的 cmake 规则,以便能够从 Windows Visual Studio 构建和运行您的项目。用自动工具试试吧! 
这种转换是非常特定于项目的,这使得编写一个普遍适用的教程变得困难。
下面是一些工具的开始,它们可能会给你一些灵感。
https://gitlab.kitware.com/cmake/community/-/wikis/Home#converters-from-other-buildsystems-to-cmake
===== 一篇与此相关的有趣文章:
为什么 KDE 项目切换到 CMake - 以及如何(续) http://lwn.net/Articles/188693/