SEO教程

SEO教程

Products

当前位置:首页 > SEO教程 >

Linux下GNU Autotools工具基础教程的:如何有效使用GNU Autotools进行软件构建?

96SEO 2026-02-19 22:49 22


Autotools工具的基础用法,涵盖了autoconf、automake等工具的功能及作用。

Linux下GNU Autotools工具基础教程的:如何有效使用GNU Autotools进行软件构建?

通过实例演示,讲解了如何使用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文件,之后我们就可以执行makemake

  • autoheader:这个工具主要是用来自动生成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.m4acsite.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.inMakefile.in文件进行文件生成,最后生成config.hMakefile文件,之后我们就可以执行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"

    alt="Pasted

    第二步:生成configure.ac文件。

    在源码路径下执行了autoscan命令之后,可以看见configure.scan文件已经生成出来了

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209334-698108259.png"

    alt="Pasted

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209314-113774963.png"

    alt="Pasted

  • AC_PREREQ()宏声明本文件要求的autoconf版本,本例使用的版本为2.71
  • AC_INIT()中分别的是:

    软件包的名字,版本,作者的联系方式(一般是Email)

  • AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码下的test.c,如果有多个源文件的话选择一个主要的文件,通常是

    main.c

  • AC_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"

    alt="Pasted

    这里有几点需要注意,第一就是注意填写好自己软件的信息,第二就是如果我们后续要使用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"

    alt="Pasted

    可以看见执行了aclocal之后,aclocal.m4文件成功输出了

    第四步:生成config.h.in文件,因为我们在configure中使用了宏检查,需要输出config.h,所以我们需要先生成config.h.in

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209256-1503264093.png"

    alt="Pasted

    执行autoheader命令之后,config.h.in也成功生成了

    第五步:生成configure文件,使用autoconf命令得到configure脚本文件

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209281-1821923245.png"

    alt="Pasted

    如果这时候我们直接运行这个脚本,可以发现,缺少install-sh脚本,这个脚本就是通过automake来生成的

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209052-662252426.png"

    alt="Pasted

    第六步:编写Makefile.am文件,执行automake命令。

    这里只写了一个比较简单的Makefile.am进行测试

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209025-2002039184.png"

    alt="Pasted

    Makefile.am文件编写规范非常重要,这里指出我踩到的另外一个坑,Makefile.am文件中的这两个宏定义,必须得规范否则也会爆出错误或者警告。

    bin_PROGRAMS的含义是生成一个可执行文件

    test,并在

    时安装到$(bindir),一般情况下$(bindir)

    test_SOURCES的结构为<目标名>_SOURCES目标名必须和bin_PROGRAMS的程序名完全一致,否则

    Automake

    除了bin_PROGRAMS还有其他Automake内部已经定义好的安装目录变量

    还有一个需要注意的点是,如果我们这时候直接使用automake命令,会提示报错,工具也对我们继续了提示需要加上--add-missing选项,添加选项--add-missing

    可以让automake工具自动添加必要的脚本文件,这里也可以看见如果AM_INIT_AUTOMAKE没有关闭GNU的严格模式,会报出缺失必要文件的错误。

    这里是因为这张图是没有修改的时候截取的,修改之后我没有重新automake

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209349-1310847039.png"

    alt="Pasted

    加上该选项,并修改了AM_INIT_AUTOMAKE之后,再次执行automake命令执行成功,并成功生成Makefile.in文件和install-sh文件

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209051-539778253.png"

    alt="Pasted

    第七步:执行configure脚本,更具Makfile.inconfig.h.in生成最后的文件。


    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209360-2035713464.png"

    alt="Pasted

    可以看见成功生成了config.status以及Makefile文件,打开该Makefile文件,可以看见生成了700多行

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209182-33307432.png"

    alt="Pasted

    我们非常简单的一个代码,autotools工具给我们生成了700多行的Makefile文件,其中大量的代码都是用来检测环境和编译器相关的内容。

    有了Makefile之后,我们就可以直接使用make命令来编译了

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209147-1035686151.png"

    alt="Pasted

    并且生成了对应的可执行文件,同时我们可以执行make

    install进行系统安装,默认安装到/user/local/bin下,需要注意的是使用make

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209129-81980537.png"

    alt="Pasted

    dist用来生成一个源码压缩包,拿到这个包之后,我们就可以将工程发布给别人或者发布成release版本了

    src="https://img2024.cnblogs.com/blog/2652772/202602/2652772-20260217172209359-157961370.png"

    alt="Pasted

    至此整个Autotools最基本的流程与用法就结束了,当然在实际开发当中,我们不可能只有一个源文件,之后的博客会对实际工程项目情况举例与分析。

    class="post-meta-container">



    SEO优化服务概述

    作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

    百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

    SEO优化核心服务

    网站技术SEO

    • 网站结构优化 - 提升网站爬虫可访问性
    • 页面速度优化 - 缩短加载时间,提高用户体验
    • 移动端适配 - 确保移动设备友好性
    • HTTPS安全协议 - 提升网站安全性与信任度
    • 结构化数据标记 - 增强搜索结果显示效果

    内容优化服务

    • 关键词研究与布局 - 精准定位目标关键词
    • 高质量内容创作 - 原创、专业、有价值的内容
    • Meta标签优化 - 提升点击率和相关性
    • 内容更新策略 - 保持网站内容新鲜度
    • 多媒体内容优化 - 图片、视频SEO优化

    外链建设策略

    • 高质量外链获取 - 权威网站链接建设
    • 品牌提及监控 - 追踪品牌在线曝光
    • 行业目录提交 - 提升网站基础权威
    • 社交媒体整合 - 增强内容传播力
    • 链接质量分析 - 避免低质量链接风险

    SEO服务方案对比

    具体其他宏的功能,大家可以查看官方的文档,这篇文章主要是autotools工具的使用,这里就不深入剖析底层了
    服务项目 基础套餐 标准套餐 高级定制
    关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
    内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
    技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
    外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
    数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
    效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

    SEO优化实施流程

    我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

    1

    网站诊断分析

    全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

    2

    关键词策略制定

    基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

    3

    技术优化实施

    解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

    4

    内容优化建设

    创作高质量原创内容,优化现有页面,建立内容更新机制。

    5

    外链建设推广

    获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

    6

    数据监控调整

    持续监控排名、流量和转化数据,根据效果调整优化策略。

    SEO优化常见问题

    SEO优化一般需要多长时间才能看到效果?
    SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
    你们使用白帽SEO技术还是黑帽技术?
    我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
    SEO优化后效果能持续多久?
    通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
    你们提供SEO优化效果保障吗?
    我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

    SEO优化效果数据

    基于我们服务的客户数据统计,平均优化效果如下:

    +85%
    自然搜索流量提升
    +120%
    关键词排名数量
    +60%
    网站转化率提升
    3-6月
    平均见效周期

    行业案例 - 制造业

    • 优化前:日均自然流量120,核心词无排名
    • 优化6个月后:日均自然流量950,15个核心词首页排名
    • 效果提升:流量增长692%,询盘量增加320%

    行业案例 - 电商

    • 优化前:月均自然订单50单,转化率1.2%
    • 优化4个月后:月均自然订单210单,转化率2.8%
    • 效果提升:订单增长320%,转化率提升133%

    行业案例 - 教育

    • 优化前:月均咨询量35个,主要依赖付费广告
    • 优化5个月后:月均咨询量180个,自然流量占比65%
    • 效果提升:咨询量增长414%,营销成本降低57%

    为什么选择我们的SEO服务

    专业团队

    • 10年以上SEO经验专家带队
    • 百度、Google认证工程师
    • 内容创作、技术开发、数据分析多领域团队
    • 持续培训保持技术领先

    数据驱动

    • 自主研发SEO分析工具
    • 实时排名监控系统
    • 竞争对手深度分析
    • 效果可视化报告

    透明合作

    • 清晰的服务内容和价格
    • 定期进展汇报和沟通
    • 效果数据实时可查
    • 灵活的合同条款

    我们的SEO服务理念

    我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

    提交需求或反馈

    Demand feedback