automake基础
automake基础
作为 Linux 下的程序开发人员,大家一定都遇到过 Makefile。用 make 命令来编译程序确实很方便。一般情况下,手工写一个简单 Makefile 并不难;但如果要写出一个符合自由软件惯例、可移植、可维护的 Makefile,就没那么容易了。
本文介绍如何使用 autoconf 和 automake 自动生成规范的构建文件。最终效果是像常见 GNU 程序一样,通过:
./configuremakemake install
完成构建与安装。
1. Makefile 介绍
Makefile 用于自动化编译和链接。一个工程通常包含多个源文件,不是每次都需要全量重编译。Makefile 通过“依赖关系”判断哪些目标需要重新构建,从而节省时间。
手写 Makefile 的常见问题:
- 规则容易和本机环境绑定。
- 路径或变量变化后需要手工调整。
- 跨平台和多人协作维护成本高。
automake/autoconf 的价值在于:
- 你只需写少量声明式模板(
configure.ac、Makefile.am)。 - 工具自动生成
configure和Makefile.in。 - 用户环境中再由
configure生成最终Makefile。
2. 使用环境
示例基于 Linux 环境,需安装:
- autoconf
- automake
- gcc / make
3. 从 Hello World 入手
下面用一个最小示例演示完整流程。
3.1. 新建三个文件
1 | helloworld.c |
3.2. 一次性执行流程(总览)
1 | aclocal |
4. 详细步骤
4.1. 创建目录
1 | mkdir helloworld |
4.2. 编写 helloworld.c
1 |
|
4.3. 生成并编辑 configure.ac
先用 autoscan 生成模板:
1 | autoscan |
你会看到 configure.scan。将其改名为 configure.ac,并精简为:
1 | AC_PREREQ([2.69]) |
然后生成 aclocal.m4 和 configure:
1 | aclocal |
4.4. 编写 Makefile.am
1 | AUTOMAKE_OPTIONS = foreign |
说明:
bin_PROGRAMS表示生成可执行文件并安装到$(bindir)。helloworld_SOURCES指定该目标对应源码。
4.5. 运行 automake
1 | automake --add-missing |
该命令会补齐辅助文件并生成 Makefile.in。
4.6. 执行 configure 生成 Makefile
1 | ./configure |
如果成功,会看到最终 Makefile 已生成。
4.7. 编译并运行
1 | make |
预期输出:
1 | Hello, Linux World! |
5. 各命令作用速记
aclocal:扫描configure.ac,生成宏文件aclocal.m4。autoconf:由configure.ac生成configure。automake --add-missing:由Makefile.am生成Makefile.in并补齐辅助脚本。./configure:检测系统环境并生成最终Makefile。make:按规则编译。
6. 常见问题
make install写成了make instal(少了一个l)。- 代码块里混用全角空格、中文引号,导致命令不可复制。
configure.in与configure.ac混用:现代项目建议统一使用configure.ac。- C 示例字符串引号写错,导致编译失败。
7. 小结
Automake 的核心收益是把“手写复杂 Makefile”的工作,转成“维护少量声明式文件”。
当项目变大后,这种方式在可维护性和可移植性上优势会越来越明显。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 因受!
评论