96SEO 2026-02-19 22:49 22
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。
https://www.gnu.org/software/autoconf/
id="一autotools工具详细介绍">一、Autotools工具详细介绍
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和makeautoheader:这个工具主要是用来自动生成config.h.in文件的,当我们执行了./configure之后,会生成一个config.h文件,在调用autoheader工具之后,就会生成config.h.in文件automake:使用automake来产生Makefile.in文件,需要注意的是Makefile.in是由Makefile.am生成的这个需要我们手动来编写这里可以注意到,最后工具用到的文件都是以.in结尾的文件,这些文件相当于我们最后需要的目标文件的输入文件
configure脚本制作流程
https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/autoconf.html
文档的第三章内容,详细阐述了configure脚本的制作流程,下面简单介绍一下,以下图流程图中,带*的是执行的命令,带[]的表示可选项
![]()
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209097-1180976358.png"
alt="Pasted
首先根据文档中的这个流程图,可以看见用我们的源文件,通过autoscan命令生成configure.scan文件,然后我们再修改这个模板,生成我们的configure.ac文件,在通过autoconf命令生成configure脚本的时候,aclocal.m4和acsite.m4这两个文件为可选项,如果我们后续需要使用automake工具,那么还需要在执行autoconf前使用aclocal工具生成aclocal.m4文件
在执行autoconf命令的同时,我们可以选择使用autoheader来生成config.h.in文件。
这个文件的作用是为
configure
提供一个模板,告诉它哪些宏需要根据系统环境进行检测,从而生成最终的config.h文件,供代码在条件编译中使用,后需会详细讲解这部分内容。
如果我们还需要使用automake工具来生成Makefile.in文件,那么需要在autoscan生成了configure.ac文件之后追加以下的流程
![]()
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209304-1030423812.png"
alt="Pasted
第一步,我们需要使用aclocal命令来生成aclocal.m4文件,有了这个文件之后,我们在生成configure的时候会使用到这个文件,然后第二步我们需要自己编写一个Makefile.am文件,然后执行automake命令来生成Makefile.in
做完上述两个流程之后,我们就可以得到两个关键文件了一个是configure脚本文件,一个是Makefile.in模板文件,在通过以下流程,生成最后的Makefile文件
![]()
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209082-1911362763.png"
alt="Pasted
直接执行configure脚本文件,脚本会去找config.h.in和Makefile.in文件进行文件生成,最后生成config.h和Makefile文件,之后我们就可以执行make命令来编译工程了
可能这里三个图的关系比较混乱,后面会通过一个工程上的实例,来具体演示Autotools的使用以及流程
id="13-autoheader工具与confighin文件">1.3
autoheader工具与config.h.in文件
前面我们提到了使用autoconf生成configure的同时,可以使用autoheader来生成config.h.in文件,这个文件到底是用来干什么的呢?
这一小节详细讲解一下。
Linux
头文件。
不同系统可能是否存在这个头文件不同,因此我们希望通过自动化的方式进行检测和适配。
我们需要先在configure.ac文件中添加配置项
[1.0])
AC_CONFIG_HEADERS([config.h]):告诉Autotools
AC_CHECK_HEADERS([unistd.h]):告知Autotools
<unistd.h>,并生成相应宏
HAVE_UNISTD_H
当我们在configure.ac中添加了这些选项之后,可以运行autoheader命令来生成config.h.in,这时的模板文件中会有以下这样的记录
/*
有了config.h.in文件之后,如果我们运行了./configure后,工具会检测系统中是否有<unistd.h>根据最终结果来生成config.h头文件,如果包含有那么在config.h文件中,就会多出
后续我们就可以通过包含config.h文件来进行条件编译了,这样代码可以在不同平台上自动适配,而不需要手动修改
模板文件,列出待检测的宏
系统检测器,把模板宏填上实际值
最终宏定义文件,代码条件编译使用
id="二autotools实例分析">二、Autotools实例分析
这一章节主要是对autotools的具体使用举例。
第一步:创建demo工程项目,新建了一个源码文件夹,创建一个c文件,编写了一个简单的代码。
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209096-1334942740.png"
第二步:生成configure.ac文件。
在源码路径下执行了autoscan命令之后,可以看见configure.scan文件已经生成出来了
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209334-698108259.png"
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209314-113774963.png"
AC_PREREQ()宏声明本文件要求的autoconf版本,本例使用的版本为2.71AC_INIT()中分别的是:软件包的名字,版本,作者的联系方式(一般是Email)
AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码下的test.c,如果有多个源文件的话选择一个主要的文件,通常是main.cAC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用AC_PROG_CC用来指定编译器,如果不指定,选用默认gcc。所要产生的文件,如果是makefile,configure会把它检查出来的结果带入makefile.in文件产生合适的makefile。
使用Automake时,还需要一些其他的参数,这些额外的宏用aclocal工具产生
https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.72/autoconf.html#Making-configure-Scripts
最后修改这个模板文件,填入自己的软件信息,并将configure.scan重命名为configure.ac文件
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209315-856118383.png"
这里有几点需要注意,第一就是注意填写好自己软件的信息,第二就是如果我们后续要使用automake工具的话,需要添加一行AM_INIT_AUTOMAKE,并且需要指定构建行为常用的选项为[foreign]如果不指定的话,就是[gnu]严格模式,会检查AUTHORS、NEWS、README、ChangeLog、COPYING、INSTALL等文件,如果缺失的话,后续使用automake就会报错,这是我踩的一个坑,对于现代的项目,大多数使用git代码管理,对于这些文件有一些是不必要的,所以这里可以关闭GNU
strict模式,如果你需要使用GNU的严格模式的话,创建这些所需文件就可以解决报错。
第三点就是记得添加输出文件列表的宏AC_CONFIG_FILES([文件名])这三点编辑好之后,一个基础的configure.ac就编辑好了
第三步:生成aclocal.m4文件,因为我们后续要使用到automake工具,需要依赖aclocal.m4文件,所以这一步通过aclocal来生成aclocal.m4文件
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209281-1527369101.png"
可以看见执行了aclocal之后,aclocal.m4文件成功输出了
第四步:生成config.h.in文件,因为我们在configure中使用了宏检查,需要输出config.h,所以我们需要先生成config.h.in
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209256-1503264093.png"
执行autoheader命令之后,config.h.in也成功生成了
第五步:生成configure文件,使用autoconf命令得到configure脚本文件
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209281-1821923245.png"
如果这时候我们直接运行这个脚本,可以发现,缺少install-sh脚本,这个脚本就是通过automake来生成的
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209052-662252426.png"
第六步:编写Makefile.am文件,执行automake命令。
这里只写了一个比较简单的Makefile.am进行测试
src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209025-2002039184.png"
Makefile.am文件编写规范非常重要,这里指出我踩到的另外一个坑,Makefile.am文件中的这两个宏定义,必须得规范否则也会爆出错误或者警告。
bin_PROGRAMS的含义是生成一个可执行文件
时安装到$(bindir),一般情况下$(bindir)
test_SOURCES的结构为<目标名>_SOURCES目标名必须和bin_PROGRAMS的程序名完全一致,否则
除了bin_PROGRAMS还有其他Automake内部已经定义好的安装目录变量
| 具体其他宏的功能,大家可以查看官方的文档,这篇文章主要是autotools工具的使用,这里就不深入剖析底层了 |
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback