将Autotools转换为CMake的教程
所以似乎有很多关于Autotools和CMake的主题的书写,但是对于我来说,我似乎无法find一个关于如何将项目从Autotools转换到CMake的好教程。 有人知道吗?
没有自动化工具可以将任意构build系统从autotools转换为cmake。 我已经手动转换了一些中等大的项目。 我喜欢为每组configure.ac
和/或Makefile.am
文件创build一个CMakeLists.txt
文件,以简化从autotools到cmake的转换。
可悲的是,这种手工方式需要发展两种系统的专业知识,其中任何一个都不应该对任何无辜的人造成伤害。
-
logging在您的机器上实际执行的自动工具的logging。 这将帮助你validation你的CMake构build系统实际编译每个文件,使用相同的编译标志,并创build自动工具所做的每个库和可执行文件; 至less在你的机器上,有你的select。
%./configure [configuration选项]> configure_autotools.log
%make> make_autotools.log
%make install> make_install_autotools.log
-
在包含
configure.ac
或Makefile.am
文件(包括项目根目录)的每个目录中,创build一个新的空CMakeLists.txt文件。 将cmakeadd_subdirectory
(…)命令添加到每个非叶CMakeLists.txt文件,以将所有cmake文件以树结构链接在一起。 将cmake project()和cmake_minimum_required()命令添加到顶级CMakeLists.txt文件的顶部。project(MyProject) cmake_minimum_required(VERSION 2.8) add_subdirectory(foo)
-
你现在有一个一致的,但没用的cmake构build系统,什么都不做。 暂时在更深的CMakeLists.txt文件中添加一些
message(...)
命令,以validation一切正确连接。 请记住,debuggingcmakeconfiguration问题时,message()
是您的朋友。 确保您的cmake基础架构现在通过尝试构build工作。 没有东西会build立或安装; 但在这一点上运用cmake基础设施是很有价值的。%mkdir build_cmake
%cd build_cmake
%ccmake -i [你的项目根目录]
[configuration,configuration,生成]
%make VERBOSE = 1
%make install
-
这是困难的部分。 逐个填充您的CMakeLists.txt文件。 以下是一些指导方针:
-
打开两个并排编辑器,一个使用CMakeLists.txt文件,另一个使用相应的Makefile.am/configure.ac文件。
-
让浏览器打开cmake命令文档 。
-
如果你可以在项目中find一个(cmake
add_library()
或add_executable()
),那么不要从最上面开始,而应该创buildcmake规则来构build一个小型库或可执行文件。 使用这种方法,您可以逐个构build您的转换。 -
在添加每个目标时,定期testing您的cmake构build系统。
-
我喜欢使用cmake
file(GLOB ...)
命令来紧凑地创build源文件列表。 请注意,这是一个有争议的观点。 -
许多常见的自动工具节都有相应的CMake命令 。 例如autoconf AC_TRY_COMPILE可以转换成cmake TRY_COMPILE 。 但大多数情况下,我发现我必须了解每一个小小的自动工具节,并找出如何编写相应的cmake。 另外,还有一系列CMake模块可以帮助创build类似于自动工具的config.h文件。 Makefile.am文件通常更容易转换,并且在转换成cmake之后实际上可以变得更紧凑。
-
将您的cmake生成结果与步骤1中捕获的autotools日志进行比较。编译标志是否相同? 所有的目标是一样的吗? 是相同的文件安装?
-
不幸的是,我最近没有把autotools转换成cmake,所以我不能够写一个全面的“如果你在Makefile.am中看到x,在CMakeLists.txt中写入y”。 有人可以build议一个公共维基的好位置,那里的人正在积极从自动工具转换到cmake可以积累一套全面的这样的指导方针吗? 我不知道这个计算器的答案是这样一个列表的最佳地点…
-
-
要获得额外的功劳,一旦你拥有了所有的工作,就可以调整你的cmake规则,以便能够从Windows Visual Studio中构build和运行你的项目。 尝试用autotools!
这种转换是非常具体的项目,这使得写一个普遍适用的教程很困难。
以下是一些工具的开始,可能会给你一些启发。
http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake
=====一个有趣的文章与此相关:
为什么KDE项目切换到CMake – 以及如何(续) http://lwn.net/Articles/188693/