Build 如何将Autotools项目转换为CMake项目?
因此,关于Autotools vs.CMake的话题似乎有很多文章,但就我的一生而言,我似乎找不到一个好的教程来指导如何将项目从Autotools(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——以及如何切换(续) 没有自动工具
Makefile.am
和configure.ac
文件)转换为CMake(CMakeLists.txt
文件)。如何做到这一点呢?这种转换非常特定于项目,这使得编写普遍适用的教程非常困难
下面是一些工具的开始,这些工具可能会给你一些做什么的灵感
=====
与此相关的一篇有趣的文章:
为什么KDE项目切换到CMake——以及如何切换(续)
没有自动工具可以将任意构建系统从自动工具转换为cmake。我已经手动转换了一些中等规模的项目。我喜欢为每组
configure.ac
和/或Makefile.am
文件创建一个CMakeLists.txt
文件,以简化从autotools到cmake的转换
可悲的是,这种手动方法需要在两个系统中培养专门知识,其中任何一个系统都不应该对任何无辜者造成伤害
configure.ac
或Makefile.am
文件的每个目录(包括项目根目录)中,创建一个新的空CMakeLists.txt文件。将cmakeAdd_子目录
(…)命令添加到每个非叶CMakeLists.txt文件,以树状结构将所有cmake文件链接在一起。将cmake project()和cmake_minimum_required()命令添加到顶级CMakeLists.txt文件的顶部
消息(…)
命令,以验证所有内容是否正确连接。请记住,调试cmake配置问题时,message()
是您的朋友。通过立即尝试构建,确保您的cmake基础架构正常工作。不会建造或安装任何东西;但在这一点上,使用cmake基础设施是很有价值的
%mkdir build_cmake
%光盘制作
%ccmake-i[您的项目根目录]
[配置、配置、生成]
%使冗长=1
%安装
- 打开两个并排编辑器,一个带有CMakeLists.txt文件,另一个带有相应的Makefile.am/configure.ac文件
- 让您的浏览器打开到
- 如果您可以在项目中找到一个小型库或可执行文件(cmake
或add\u library()
),那么不要从最顶层开始,而是从创建用于构建小型库或可执行文件的cmake规则开始。使用这种方法,您可以一次完成一件转换add\u executable()
- 在添加每个目标时,定期测试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的人们可以积累一整套这样的指南?我不确定这个答案是否是这个列表的最佳位置
我看到了。但它们只是针对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)