一分钟了解 Linux 中基础的Autotools构建系统基础入门! |
构建过程可移植、可维护、自动化
它的核心由三个主要工具组成:Autoconf、Automake、Libtool
Autotools(GNU Build System)是一套自动化构建系统工具链,主要用于在不同类 UNIX 系统上让软件的构建过程可移植、可维护、自动化。
它的核心由三个主要工具组成:Autoconf、Automake、Libtool。我们来分层看它的组成和职责。
一、核心组成工具链
1. Autoconf
- 作用:生成可移植的
configure
脚本。 - 输入:
configure.ac
(或旧格式configure.in
) - 输出:
configure
- 功能
- 自动检测系统环境(编译器、库、头文件、函数、平台特性等)。
- 生成 Makefile 所需的配置宏(写入
config.h
、Makefile
)。 内部机制
- 使用
m4
宏处理器展开.m4
宏定义。 - 用户在
configure.ac
里调用宏,如:
AC_INIT([myproject], [1.0])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CHECK_LIB([m], [sin])
AC_OUTPUT
2. Automake
- 作用:生成标准化的
Makefile.in
模板。 - 输入:
Makefile.am
- 输出:
Makefile.in
- 功能
- 提供可移植的构建规则(编译、安装、清理、打包等)。
- 避免开发者手写复杂的 Makefile。
- 支持 GNU 标准目标(如
make distcheck
、make install
)。 内部机制
- 解析
.am
文件中变量(如bin_PROGRAMS
、lib_LTLIBRARIES
、SOURCES
)。 - 用模板文件
Makefile.am
→Makefile.in
。
3. Libtool
作用:统一封装不同平台的动态库与静态库构建过程。
输入:Makefile.am
中的 lib_LTLIBRARIES
定义。
输出:跨平台的 .la
(Libtool archive)文件与对应库。
功能
- 处理不同系统的
.so
、.a
、.dylib
差异。 - 简化共享库构建与版本管理(
version-info
)。 - 避免直接书写复杂的链接参数。
二、辅助与支撑工具
工具 | 作用 | 典型输出 |
---|---|---|
aclocal | 收集并生成 aclocal.m4 (Autoconf 宏定义集合) | aclocal.m4 |
autoheader | 根据 configure.ac 自动生成配置头模板 | config.h.in |
autoscan | 扫描源码自动生成初始 configure.scan | configure.scan |
autoupdate | 升级旧宏到新版本 | 更新后的 configure.ac |
autoreconf | 一键重建整个 autotools 构建环境 | 一系列 *.in, configure, |
三、工具链工作流程
[开发者]
↓
configure.ac ───► autoconf ───► configure
Makefile.am ───► automake ───► Makefile.in
↓ ↓
autoheader ───► config.h.in ↓
(运行 configure)
↓
┌───────────────┐
│ Makefile, config.h │
└───────────────┘
↓
make / make install
四、典型命令顺序(开发者侧)
aclocal
autoheader
automake --add-missing
autoconf
./configure
make
make install
五、总结要点(工程视角)
- Autoconf → 检测系统、生成配置脚本
- Automake → 生成 Makefile 模板
- Libtool → 管理可移植库构建
- 最终产物:
configure
+Makefile.in
→ 用户端生成Makefile
简言之:
版权声明:感谢您的阅读,资源整理自网络,如果您发现任何侵权行为,请联系 理科生网 管理人员,管理员将及时删除侵权内容。否则均为 理科生网 原创内容,转载时请务必以超链接(而非纯文本链接)标注来源于理科生网及本文完整链接,感谢!{alertInfo}Ahmedabad