将Autotools转换为CMake的教程

Kur*_*aum 51 build-process build autotools cmake build-system

因此,关于Autotools与CMake的主题似乎有很多写作,但对于我的生活,我似乎无法找到关于如何将项目从Autotools转换为CMake的好教程.有人知道吗?

Chr*_*uns 87

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

遗憾的是,这种手动方法需要在两个系统中开发专业知识,其中任何一个系统都不应该对任何无辜者施加影响.

  1. 捕获autotools构建实际在您的计算机上执行的操作的记录.这将帮助您验证您的CMake构建系统是否使用相同的编译标志实际编译每个文件,并创建autotools所执行的每个库和可执行文件; 至少在你的机器上,有你的选择.

    %./ configure [configure options]> configure_autotools.log

    %make> make_autotools.log

    %make install> make_install_autotools.log

  2. 在包含configure.acMakefile.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)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 你现在有一个一致但无用的cmake构建系统,什么都不做.暂时message(...)在较深的CMakeLists.txt文件中添加一些命令,以验证所有内容是否正确连接.请记住,message()在调试cmake配置问题时,这是您的朋友.现在通过尝试构建来确保您的cmake基础设施正常工作.什么都不会建成或安装; 但是在这一点上运用cmake基础设施是很有价值的.

    %mkdir build_cmake

    %cd build_cmake

    %ccmake -i [您的项目根目录]

    [配置,配置,生成]

    %make VERBOSE = 1

    %make install

  4. 这是困难的部分.逐个填充CMakeLists.txt文件.以下是一些指导原则:

    • 打开两个并排编辑器,一个使用CMakeLists.txt文件,另一个使用相应的Makefile.am/configure.ac文件.

    • 让您的浏览器打开cmake命令文档.

    • 如果您可以在项目中找到一个小型库或可执行文件(cmake add_library()或者add_executable()),则可以从创建用于构建小型库或可执行文件的cmake规则开始,而不是从最顶层开始.使用这种方法,您可以一次构建一个转换.

    • 在添加每个目标时,请定期测试您的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".有人可以建议一个公共维基的良好位置,那些积极从autotools转换为cmake的人可以积累一整套这样的指南吗?我不确定这个stackoverflow答案是否是这样一个列表的最佳位置......

  5. 为了获得额外的功劳,一旦您完成所有工作,调整您的cmake规则,以便能够从Windows Visual Studio构建和运行您的项目.尝试使用autotools!

  • 我不想要一个自动工具.这就是我正在寻找的那种确切的讨论和一般建议.比如,"我喜欢为每组configure.ac和Makefile.am文件创建一个CmakeLists.txt文件".如果你能详细说明,我会给你赏金. (5认同)
  • "尝试使用autotools!" ./configure CC =/path/to/MSVS/cc? (3认同)
  • 这是迄今为止我见过的最好的.我真的很想看到"如果你在Makefile.am中看到x,请在CMakeLists.txt中写y".如果有人发现,请告诉我. (2认同)
  • 即使CMake文档中的文件(文件(GLOB ...)`仍未被推荐,因此实际上会使CMake的文件跟踪变得更难.维护源文件的手动列表是可行的方法.我还要补充一点,转换一个随机项目比转换一个非常亲密的项目要困难得多,尤其是在代码库很大的情况下.一直困扰我的部分是在构建链中使用非标准工具的时候. (2认同)

Han*_*ans 11

此转换特定于项目,这使得编写通用应用教程变得困难.

这是一些工具的开始,可以为您提供一些灵感.

http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake

=====一篇与此相关的有趣文章:

为什么KDE项目切换到CMake - 以及如何(续) http://lwn.net/Articles/188693/