因此,关于Autotools与CMake的主题似乎有很多写作,但对于我的生活,我似乎无法找到关于如何将项目从Autotools(Makefile.am
和configure.ac
文件)转换为CMake的好教程(CMakeLists.txt
文件)。怎么去做这个?
没有自动化工具可以将任意构建系统从autotools转换为cmake。我手动转换了一些中等大小的项目。我喜欢为每组CMakeLists.txt
和/或configure.ac
文件创建一个Makefile.am
文件,以简化从autotools到cmake的转换。
遗憾的是,这种手动方法需要在两个系统中开发专业知识,其中任何一个系统都不应该对任何无辜者施加影响。
configure.ac
或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)
message(...)
命令,以验证所有内容是否正确连接。请记住,在调试cmake配置问题时,message()
是您的朋友。现在尝试构建,确保您的cmake基础设施正常工作。什么都不会建成或安装;但是在这一点上运用cmake基础设施是很有价值的。
%mkdir build_cmake
%cd build_cmake
%ccmake -i [您的项目根目录]
[配置,配置,生成]
%make VERBOSE = 1
%make installadd_library()
或add_executable()
),则可以从创建用于构建小型库或可执行文件的cmake规则开始,而不是从最顶层开始。使用这种方法,您可以一次构建一个转换。
在添加每个目标时,请定期测试您的cmake构建系统。
我喜欢使用cmake file(GLOB ...)
命令来紧凑地创建源文件列表。请注意,这是一个有争议的意见。
许多常见的autotools节有相应的CMake commands。例如,autoconf AC_TRY_COMPILE可以转换为cmake TRY_COMPILE。但大多数情况下,我发现我必须了解每个小的autotools节做什么,并弄清楚如何编写相应的cmake。此外,有一个series of CMake modules有助于创建类似autotools的config.h文件。 Makefile.am文件通常更容易转换,并且在转换为cmake后实际上可以变得更紧凑。
将您的cmake构建结果与您在步骤1中捕获的autotools日志进行比较。编译标志是否相同?是否建立了所有相同的目标?是否安装了相同的文件?
不幸的是我最近没有将autotools转换为cmake,所以我无法编写全面的“如果你在Makefile.am中看到x,在CMakeLists.txt中写y”。有人可以建议一个公共维基的良好位置,那些积极从autotools转换为cmake的人可以积累一整套这样的指南吗?我不确定这个stackoverflow答案是否是这样一个列表的最佳位置......此转换特定于项目,这使得编写通用应用教程变得困难。
这是一些工具的开始,可以为您提供一些灵感。
http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake
=====一篇与此相关的有趣文章:
为什么KDE项目转向CMake - 以及如何(继续)http://lwn.net/Articles/188693/