Linux下如何使用GNU Autotools进行项目构建和配置?

摘要:本博客介绍了Linux下GNU Autotools工具的基础用法,涵盖了autoconf、automake等工具的功能及作用。通过实例演示,讲解了如何使用autoconf生成配置脚本,以及如何通过automake和Makefile.am定制
对于我们平时写的小的测试Demo程序,可能自己手动编写一个Makefile文件就可以编译整个项目了,但是对于一些大型的工程,包含多个源码文件夹、头文件文件夹、库文件文件夹,如果我们每个源码文件的Makefile文件都自己去编写会非常繁琐,所以这时候需要一些自动化工具来帮助我们简化项目的构建,这里比较主流的有两种工具一个是GNU下的Autotools工具,一个是CMake工具。 Autotools工具是一些版本比较老的工具了,遗留了很多问题,包括他的语法复杂(m4宏语言),涉及的工具种类太多,生成的configure脚本非常庞大等问题,在2000年后出现的新一代构建系统包括CMake、Meson、Ninja等能够有效解决Autotools的历史疑难杂症,并且语法更加现代化、生成速度更快。那我们为什么还要学习了解Autotools呢?因为历史原因,早年很多的开源软件都是使用的Autotools来构建的,并且Autotools目前在GNU体系中还是大量使用,并且在嵌入式Linux中非常常见,而且在一些老牌的C项目中也非常常见,所以还是非常有必要了解Autotools。 这里给出官方的Autotools的文档连接 https://www.gnu.org/software/autoconf/ 一、Autotools工具详细介绍 1.1 Autotools工具组成 GNU Autotools并不是一个工具,而是由一系列的工具合集组成,在现如今的Linux发行版中,大概率是自带这些工具的,如果没有可以自行下载 autoscan:这个工具主要是用来扫描查找源代码目录下的源文件用来生成configure.scan文件。configure.scan文件是自动生成的模板,里面包含了一些系统配置的基本选项都是一些宏定义,这些宏通过autoconf工具处理后会变成检查系统特性、环境变量的shell脚本,我们可以根据这个模板修改,最后将configure.scan重新命名为configure.ac文件 aclocal:这个工具是一个perl脚本程序,他主要用来根据上一步的configure.ac文件的内容,自动生成aclocal.m4文件 autoconf:这个工具会使用configure.ac文件来生成名称为configure的shell脚本文件用来检查系统特性与环境变量,运行这个脚本文件之后,就会生成Makefile文件,之后我们就可以执行make和make install命令了 autoheader:这个工具主要是用来自动生成config.h.in文件的,当我们执行了./configure之后,会生成一个config.h文件,在调用autoheader工具之后,就会生成config.h.in文件 automake:使用automake来产生Makefile.in文件,需要注意的是Makefile.in是由Makefile.am生成的这个需要我们手动来编写 这里可以注意到,最后工具用到的文件都是以.in结尾的文件,这些文件相当于我们最后需要的目标文件的输入文件 1.2 configure脚本制作流程 这块内容可以参考 https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/autoconf.html 文档的第三章内容,详细阐述了configure脚本的制作流程,下面简单介绍一下,以下图流程图中,带*的是执行的命令,带[]的表示可选项 首先根据文档中的这个流程图,可以看见用我们的源文件,通过autoscan命令生成configure.scan文件,然后我们再修改这个模板,生成我们的configure.ac文件,在通过autoconf命令生成configure脚本的时候,aclocal.m4和acsite.m4这两个文件为可选项,如果我们后续需要使用automake工具,那么还需要在执行autoconf前使用aclocal工具生成aclocal.m4文件 在执行autoconf命令的同时,我们可以选择使用autoheader来生成config.h.in文件。这个文件的作用是为 configure 提供一个模板,告诉它哪些宏需要根据系统环境进行检测,从而生成最终的config.h文件,供代码在条件编译中使用,后需会详细讲解这部分内容。
阅读全文