autoconf
Autoconf
定义
Autoconf是一个自动化构建的CLI工具,用于生成可移植的configure脚本。configure脚本会完成以下事情:
- 根据
configure.ac文件定义的规则,运行时自动检查系统环境:操作系统、编译器、库、函数、头文件、字节序、路径等 - 根据检测结果及用户输入生成
Makefile(通常需要一个Makefile.in模板,由automake工具提供)
1 | 源码目录 |
AutoConf有以下特性:
- 跨平台性强:自动适配不同 Unix/Linux 系统
- 减少手动维护:不需要为每个平台写单独 Makefile
- 检测粒度高:检查函数、库、头文件甚至类型大小
其实其他自动化构建工具,比如CMake也有这些特性,只不过一些老软件开发的时候并没有CMake,所以用这些比较老的构建工具
configure用法
configure是autoconf工具链中最重要的一个脚本,它除了完成环境的检测,还可以由用户指定一些编译参数。下面介绍它的用法
安装目录相关参数
| 参数 | 作用 |
|---|---|
--prefix=PREFIX |
设置软件安装根目录(默认 /usr/local) 最终可执行文件、库、头文件等都在这个目录下。 |
--bindir=DIR |
可执行文件安装目录(默认 $prefix/bin) |
--libdir=DIR |
库文件安装目录(默认 $prefix/lib 或 $prefix/lib64) |
--includedir=DIR |
头文件安装目录(默认 $prefix/include) |
--datadir=DIR |
数据文件安装目录(默认 $prefix/share) |
--sysconfdir=DIR |
配置文件目录(默认 $prefix/etc) |
例子:
1 | ./configure --prefix=/opt/myapp |
会把软件安装到 /opt/myapp/bin、/opt/myapp/lib 等。
功能启用/禁用参数
很多开源软件在 configure.ac 里会定义开关宏,允许用户选择启用或禁用功能。常见形式:
| 参数 | 说明 |
|---|---|
--enable-FEATURE |
启用某功能 |
--disable-FEATURE |
禁用某功能 |
--with-PACKAGE |
使用某个库或依赖(自动检测) |
--without-PACKAGE |
不使用某个库或依赖 |
例子:
1 | ./configure --enable-shared --disable-static |
- 第一行启用动态库生成,禁用静态库。
- 第二行指定 OpenSSL 安装路径。
编译器和编译选项
| 参数/环境变量 | 说明 |
|---|---|
CC |
指定 C 编译器,例如 CC=gcc-12 |
CXX |
指定 C++ 编译器 |
CFLAGS |
C 编译器选项,如优化、调试标志 -O2 -g |
CXXFLAGS |
C++ 编译器选项 |
LDFLAGS |
链接器选项,如库路径 -L/usr/local/lib |
CPPFLAGS |
预处理器选项,如头文件路径 -I/usr/local/include |
例子:
1 | CC=clang CFLAGS="-O2 -g" ./configure --prefix=/opt/myapp |
- 使用 clang 编译器
- 设置优化和调试选项
- 安装到
/opt/myapp
帮助和调试选项
| 参数 | 说明 |
|---|---|
--help |
显示所有可用选项和说明 |
--version |
显示软件版本 |
--cache-file=FILE |
使用缓存文件减少重复检测(默认 config.cache) |
--quiet / --silent |
安静模式,减少输出信息 |
例子:
1 | ./configure --help |
通常会列出所有 --prefix、--enable、--with 选项
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.




