简介
在开源项目中,经常遇到 autotools 和 cmake 这两种生成 Makefile 文件的方式,有时候也挺迷糊。之前使用项目的作者给出的方法构建完 Makefile 就不再考虑了这些脚本了。但是作者如果没有给出构建方法,就会遇到这样的问题:到底应该用哪个?Makefile 文件是怎么构建的?
于是就做了一个整理,分享出来。不是深入研究,只调研了给定某个开源项目怎么构建 Makefile 文件,主打一个自己够用,所以文章中某些内容不一定准确。
autotools 刚开始的时候作为 GNU 项目的一部分,旨在解决跨平台开发中遇到的问题。在90年代有很多类 Unix 系统的变种,为了代码能跨平台编译,所以创建了这个项目。后来 autotools 发展成了许多开源项目的标准工具,在很多大型项目,尤其是起源比较早的项目经常会看到 autotools 相关的脚本。
但是 autotools 学习起来可能有些难度,掌握 configure.ac
和 Makefile.am
文件的编写并不容易。
cmake(Cross-platform Make) 是一款跨平台的自由软件,用于管理构建过程,支持多种编译器和操作系统。
语法比较简洁,平台兼容好,模块化设计,内置了很多 命令(方法)、模块、策略、属性和变量 可以直接使用。
autotools
autotools 包含很多工具,包括:autoconf、autoreconf、automake、aclocal、autom4te、libtools等。另外,在实际使用中,还可能需要安装一些库和脚本。遇到具体的报错情况,可以根据提示,把需要的安装的补上来即可。
构建过程大致如下图:

这个是比较复杂的,在实际使用过程中,我们不需要一步步处理,我又画了个简单的图:

在构建Makefile的时候,我们只需要执行 autoconf 或者 autoreconf 工具,然后执行 ./configure
就可以了。
注意查看 ./configure --help
文档,给的 参数 和 当前的环境变量 不同,会导致生成的 Makefile
文件不一样,那么编译出来的结果也不一样。
cmake
cmake 就比较简单,涉及的文件也没那么多,其构建 Makefile 的过程大致如下:

一般情况先,我们会在源文件目录下创建一个 build 目录,进入 build 目录,执行 cmake -DXXX=ON -DYYY=OFF ..
,这样构建不污染源代码,会在 build/ 目录下生成中间文件以及某些根据系统生成的文件(例如:config.h)。注意 .. 是指上一层目录。
cmake 内置的 命令(方法)、模块、策略、属性和变量 可以按照如下方法查询:

还可以查询具体功能的说明:

发表回复