将Autotools转换为CMake的教程

所以似乎有很多关于Autotools和CMake的主题的书写,但是对于我来说,我似乎无法find一个关于如何将项目从Autotools转换到CMake的好教程。 有人知道吗?

没有自动化工具可以将任意构build系统从autotools转换为cmake。 我已经手动转换了一些中等大的项目。 我喜欢为每组configure.ac和/或Makefile.am文件创build一个CMakeLists.txt文件,以简化从autotools到cmake的转换。

可悲的是,这种手工方式需要发展两种系统的专业知识,其中任何一个都不应该对任何无辜的人造成伤害。

  1. logging在您的机器上实际执行的自动工具的logging。 这将帮助你validation你的CMake构build系统实际编译每个文件,使用相同的编译标志,并创build自动工具所做的每个库和可执行文件; 至less在你的机器上,有你的select。

    %./configure [configuration选项]> configure_autotools.log

    %make> make_autotools.log

    %make install> make_install_autotools.log

  2. 在包含configure.acMakefile.am文件(包括项目根目录)的每个目录中,创build一个新的空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) 
  3. 你现在有一个一致的,但没用的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

  4. 这是困难的部分。 逐个填充您的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可以积累一套全面的这样的指导方针吗? 我不知道这个计算器的答案是这样一个列表的最佳地点…

  5. 要获得额外的功劳,一旦你拥有了所有的工作,就可以调整你的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/