项目RFC 7:丢弃自动工具,维护CMake¶
- 作者
迈克·塔夫斯
- 联系
- 状态
采用
- 实施目标
项目9.0
- 最后更新
2021-10-27
总结¶
这个RFC提议放弃AutoTools for Proj 9.0,并维护用于构建自动化、测试和打包的CMake。这将减少项目的总体维护,并使库能够集成到使用CMake的其他项目中。
背景¶
以下是用于项目的构建工具的简短时间表:
在整个20世纪90年代中期,Gerald Evenden维护了一个Unix构建系统,其中包含一些脚本(其中一些是从Autoconf派生的)和Makefile模板。
2000年,Frank Warmeram为Proj 4.4.0编写了Autoconf和Automake配置。
然后是NMake配置,以构建Windows版的Proj 4.4.2。
2014年,Howard Butler为Proj 4.9.0RC1引入了CMake构建设置。CMake配置在4.9.1版中得到了改进,但当时没有考虑到与AutoTools版本的功能对等。
对于Proj 6.0.0,删除了NMake构建设置,因为它的功能已被CMake取代。
动机¶
删除AutoTools的主要动机是减少维护多个构建配置的负担,这需要开发人员熟悉不同的工具和配置文件。维护单一构建系统还有其他几个好处:
从源库中删除额外的配置和M4宏文件,
简化用于运行CI服务测试的脚本(GitHub操作、TravisCI)、
减少用于CI服务测试的编译时间(和碳足迹),
简化开发工作,特别是使用新的贡献者。
为什么要放弃AutoTools?¶
GNU构建系统或AutoTools由一套工具组成,包括Autoconf和Automake,可用于在类Unix系统上构建软件。这些工具不是跨平台的,也不会天真地与Microsoft Windows上的开发环境集成。此外,现有的项目自动工具版本不安装从使用CMake的其他项目中查找项目所需的CMake配置文件 (#2546 )。
为什么使用CMake?¶
CMake是一个开源的跨平台工具,用于构建自动化、测试和打包软件。它不直接编译软件,而是使用生成器管理构建过程,生成器包括Unix Makefile和忍者以及其他基于命令的工具和IDE工具。CMake软件自2000年诞生以来一直在积极开发中。CMake语言是通过向后兼容的策略精心开发的,旨在提供跨不同版本的一致行为。CMake目前是Proj的首选构建工具,原因如下:
它自2014年以来一直存在于项目代码库中,并为活跃的项目贡献者所熟悉,
它可以安装配置文件,其他使用CMake查找项目以通过链接的软件可以使用这些配置文件
find_package()
,Proj的第三方二进制包中使用了CMake配置,包括conda-forge和vcpkg。
它可以用来在所有主要操作系统和编译器组合(在兼容的情况下)上构建项目,
它集成了现代的IDE和工具,包括Microsoft Visual Studio和Qt Creator。
为什么不是CMake呢?¶
还有其他现代跨平台构建系统,包括Meson和Bazel,它们比CMake有许多优势。然而,它们目前并没有被积极的项目贡献者广泛使用。这个RFC不应该限制未来的构建系统配置被引入到项目中,如果随着时间的推移,它们被证明对CMake有优势。
潜在影响¶
目前依赖AutoTools的二进制打包程序显然需要使用CMake转换构建和测试项目。与Proj的多拱门构建相关的问题可能会变得很明显,可以对其进行修补和/或报告给Proj开发人员。AutoTools的一个功能是构建静态和动态(共享)库,打包人员可以分发这些库。此功能当前未针对Proj进行设置,因为它需要配置和构建两次。
使用Proj二进制程序包的最终用户不应受到影响。Proj应该可以通过pkg-config和CMake发现 find_package()
。其他使用AutoTools的项目将继续按预期工作,静态或动态链接到由CMake构建的项目。
过渡计划¶
如果该提案获得批准,应完成以下任务:
重写CI测试以仅使用CMake进行打包、构建、测试、安装和安装后测试,
删除仅由AutoTools使用的文件,还会更新
.gitignore
,更新文档和
HOWTORELEASE
笔记。
相关问题将在GitHub上使用标签进行跟踪 RFC7: Autotools→CMake 。
收养状况¶
RFC于2021-10-26通过,来自以下PSC成员的+1
克里斯蒂安·埃弗斯
甚至鲁奥
霍华德巴特勒
托马斯·克努森
库尔特·施韦尔
查尔斯·卡尼
托马斯·克努森