1. Hello World 的 Autotools 化
任务说明
本案例将一个最简单的 C 语言 Hello World 程序改造为使用 GNU Autotools 构建的项目。完成目标后,用户可以通过标准的 ./configure && make 流程编译程序,并通过 make install 安装到指定目录,最终在命令行执行 hello 命令输出问候语。
项目结构
在空目录 hello-autotools/ 中创建以下三个文件:
hello-autotools/
├── configure.ac
├── Makefile.am
└── src/
├── Makefile.am
└── main.c
源文件实现
src/main.c — 程序入口,打印问候语:
#include <stdio.h>
int main(void) {
printf("Hello, Autotools World!\n");
return 0;
}
configure.ac — Autoconf 配置脚本模板,声明项目信息并启用 Automake:
AC_INIT([hello-autotools], [1.0], [your@email.com])
AM_INIT_AUTOMAKE([foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT
Makefile.am(顶层)— 声明子目录:
SUBDIRS = src
src/Makefile.am — 声明可执行文件的构建规则:
bin_PROGRAMS = hello
hello_SOURCES = main.c
构建与安装
在项目根目录依次执行以下命令:
autoreconf --install
./configure
make
sudo make install
说明:autoreconf --install 会依次调用 autoconf、automake 并生成缺失的辅助文件(如 configure 脚本、Makefile.in 模板)。--foreign 选项放宽了 GNU 编码标准检查,避免因缺少 NEWS、AUTHORS 等文件而报错。
验证方法与判定标准
完成安装后,在任意目录执行:
hello
若终端输出 Hello, Autotools World! 且退出码为 0,则判定案例通过。若未执行 make install,也可在 src/ 目录下直接运行 ./hello 验证编译产物。
Autotools 工具链数据流
关键点说明
AC_CONFIG_HEADERS([config.h])会生成config.h,本案例虽未直接引用,但保留该宏可为后续添加平台特性检测预留标准接口。bin_PROGRAMS是 Automake 约定的变量名,表示安装到bindir(默认为/usr/local/bin)的可执行程序。- 若系统缺少
autoreconf,需先安装autoconf与automake软件包(Debian/Ubuntu 下执行sudo apt install autoconf automake)。