Build 如何将Autotools项目转换为CMake项目?

Build 如何将Autotools项目转换为CMake项目?,build,build-process,cmake,autotools,build-system,Build,Build Process,Cmake,Autotools,Build System,因此,关于Autotools vs.CMake的话题似乎有很多文章,但就我的一生而言,我似乎找不到一个好的教程来指导如何将项目从Autotools(Makefile.am和configure.ac文件)转换为CMake(CMakeLists.txt文件)。如何做到这一点呢?这种转换非常特定于项目,这使得编写普遍适用的教程非常困难 下面是一些工具的开始,这些工具可能会给你一些做什么的灵感 ===== 与此相关的一篇有趣的文章: 为什么KDE项目切换到CMake——以及如何切换(续) 没有自动工具

因此,关于Autotools vs.CMake的话题似乎有很多文章,但就我的一生而言,我似乎找不到一个好的教程来指导如何将项目从Autotools(
Makefile.am
configure.ac
文件)转换为CMake(
CMakeLists.txt
文件)。如何做到这一点呢?

这种转换非常特定于项目,这使得编写普遍适用的教程非常困难

下面是一些工具的开始,这些工具可能会给你一些做什么的灵感

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

为什么KDE项目切换到CMake——以及如何切换(续)
没有自动工具可以将任意构建系统从自动工具转换为cmake。我已经手动转换了一些中等规模的项目。我喜欢为每组
configure.ac
和/或
Makefile.am
文件创建一个
CMakeLists.txt
文件,以简化从autotools到cmake的转换

可悲的是,这种手动方法需要在两个系统中培养专门知识,其中任何一个系统都不应该对任何无辜者造成伤害

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

    %./configure[配置选项]>configure_autotools.log

    %make>make_autotools.log

    %make install>make_install_autotools.log

  • 在包含
    configure.ac
    Makefile.am
    文件的每个目录(包括项目根目录)中,创建一个新的空CMakeLists.txt文件。将cmake
    Add_子目录
    (…)命令添加到每个非叶CMakeLists.txt文件,以树状结构将所有cmake文件链接在一起。将cmake project()和cmake_minimum_required()命令添加到顶级CMakeLists.txt文件的顶部

  • 您现在有了一个一致但无用的cmake构建系统,它什么也不做。在更深层次的CMakeLists.txt文件中临时添加一些
    消息(…)
    命令,以验证所有内容是否正确连接。请记住,调试cmake配置问题时,
    message()
    是您的朋友。通过立即尝试构建,确保您的cmake基础架构正常工作。不会建造或安装任何东西;但在这一点上,使用cmake基础设施是很有价值的

    %mkdir build_cmake

    %光盘制作

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

    [配置、配置、生成]

    %使冗长=1

    %安装

  • 这是最难的部分。逐个填充CMakeLists.txt文件。以下是一些准则:

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

    • 让您的浏览器打开到

    • 如果您可以在项目中找到一个小型库或可执行文件(cmake
      add\u library()
      add\u executable()
      ),那么不要从最顶层开始,而是从创建用于构建小型库或可执行文件的cmake规则开始。使用这种方法,您可以一次完成一件转换

    • 在添加每个目标时,定期测试cmake构建系统

    • 我喜欢使用cmake
      文件(GLOB…
      命令来紧凑地创建源文件列表。请注意,这是一个有争议的观点

    • 许多常见的自动工具节都有相应的。例如,可以将autoconf转换为cmake。但是,我发现我必须了解每个autotools小节的功能,并找出如何编写相应的cmake。此外,还有一个帮助创建自动工具(如config.h文件)的工具。Makefile.am文件通常更容易转换,并且在转换为cmake后实际上可以变得更紧凑

    • 将您的cmake构建结果与您在步骤1中捕获的autotools日志进行比较。编译标志是否相同?所有的目标都是一样的吗?是否安装了相同的文件

    • 不幸的是,我最近没有将autotools转换为cmake,因此我无法编写一个全面的“如果您在Makefile.am中看到x,请在CMakeLists.txt中写入y”。有人能为一个公共维基推荐一个好的位置吗?在那里,积极从autotools转换到cmake的人们可以积累一整套这样的指南?我不确定这个答案是否是这个列表的最佳位置

  • 为了获得额外的积分,一旦一切正常,调整您的cmake规则,以便能够从Windows Visual Studio构建和运行您的项目。用自动工具试试吧


  • 我看到了。但它们只是针对Soooo KDE的,我没有发现它们有那么大的帮助。我不想要一个自动工具。我正在寻找的正是这种讨论和一般性建议。比如,“我想为每组configure.ac和Makefile.am文件创建一个CmakeLists.txt firl”。如果你能详细说明这一点,我将把赏金奖励给你。@KurtisNusbaum:我编辑了我的答案,详细说明了我所经历的过程,包括步骤和更多的指导原则。这样更有帮助吗?这是我迄今为止看到的最好的。我真的很想看到一个“如果你在Makefile.am中看到x,在CMakeLists.txt中写y”。如果有人发现了这一点,请告诉我。+1是一篇不错的帖子,即使是CMake文档也不推荐源代码的
    file(GLOB…
    ,因为它实际上使CMake更难跟踪文件。维护源文件的手动列表是一种方法。我还要补充一点,转换一个随机项目要比转换一个真正的项目困难得多
    project(MyProject)
    cmake_minimum_required(VERSION 2.8)
    add_subdirectory(foo)