build - 如何将 Autotools 项目转换为 CMake 项目?

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




所以似乎有很多关于 Autotools 与 CMake 的文章,但就我的生活而言,我似乎找不到关于如何从 Autotools 转换项目的好教程(Makefile.amconfigure.ac文件)到 CMake( CMakeLists.txt 文件)。怎么做呢?

最佳答案

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

遗憾的是,这种手动方法需要开发两个系统的专业知识,任何一个都不应该加给任何无辜的人。

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

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

    % make > make_autotools.log

    % make install > make_install_autotools.log

  • 在每个包含 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)
    
  • 您现在有一个一致但无用的 cmake 构建系统,它什么都不做。临时加几条message(...)更深层的 CMakeLists.txt 文件中的命令以验证所有内容是否正确连接。请记住 message()在调试 cmake 配置问题时是您的 friend 。立即尝试构建以确保您的 cmake 基础架构正常工作。什么都不会被构建或安装;但此时练习 cmake 基础设施很有值(value)。

    % mkdir build_cmake

    % cd build_cmake

    % ccmake -i [your project root]

    [configure, configure, generate]

    % make VERBOSE=1

    % make install

  • 这是困难的部分。一一填充您的 CMakeLists.txt 文件。以下是一些指导方针:
  • 打开两个并排编辑器,一个使用 CMakeLists.txt 文件,另一个使用相应的 Makefile.am/configure.ac 文件。
  • 让浏览器打开 cmake commands documentation .
  • 与其从最顶层开始,不如从创建用于构建小型库或可执行文件的 cmake 规则开始,如果您能在项目中找到规则(cmake add_library()add_executable())。使用这种方法,您可以一次建立一个转换。
  • 添加每个目标时,请定期测试您的 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”。有人可以建议一个公共(public) wiki 的好位置,在那里积极从 autotools 转换为 cmake 的人们可以积累一套全面的此类指南吗?我不确定此 stackoverflow 答案是否是此类列表的最佳位置...
  • 额外的功劳是,一旦您一切正常,请调整您的 cmake 规则,以便能够从 Windows Visual Studio 构建和运行您的项目。用自动工具试试吧!
  • https://stackoverflow.com/questions/7132862/

    相关文章:

    jenkins - 使用 H/1 * * * * 每分钟运行一次 Jenkins 作业

    visual-studio-2012 - VS 2012 构建 Hello World : "The

    ios - 使用没有代码设计的 xcodebuild 构建 iOS 应用程序

    android - 错误 :Execution failed for task ':android:

    c# - 使用 CMake 生成 C# 项目

    c++ - Visual Studio 2013 错误 MS8020 Build tools v14

    xcode - 用于使用最新 sdk 的 xcodebuild 参数。

    linux - 使用make构建后的.d文件是什么

    java - Maven多模块项目的构建顺序?

    gcc - 在 CMake 中使用 -isystem 而不是 -I