autotools可以根据环境变量自动切换编译编译平台, 生成针对目标平台的软件或库。 它是在在Makefile的基础上进行了一些列的自动化构建。 开发者需要编辑的只有源代码的编译选项及依赖关系。
sudo apt-get install autoconf automake libtool
// 我们以编译最简单的hello.c为例, 内容如下
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello, bobo.\n");
return 0;
}
// Makefile.am 内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c
autoscan
工具生成configure.ac模板# 旧版autotools工具使用的是configure.in文件, 后续版本先扫描configure.ac文件,再扫描configure.in模板
$ autoscan # 执行后无输出就是对的
# 执行后生成 autoscan.log 和 configure.scan 两个文件, 然后将configure.scan重命名为configure.ac
# 在 configure.ac 中添加一行宏定义 AM_INIT_AUTOMAKE()
# AM_INIT_AUTOMAKE 是 automake 的一个宏,它用于初始化 automake 需要的变量和设置
# 添加后内容如下:
....
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE([foreign -Werror])
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])
....
# autoreconf 会自动按顺序执行下面2, 3, 4, 5步骤生成configure及Makefile.in
$ autoreconf --install
# 执行后有如下输出:
configure.ac:11: installing './compile'
configure.ac:6: installing './install-sh'
configure.ac:6: installing './missing'
Makefile.am: installing './depcomp'
下面列出 autoreconf 执行的每一个步骤
aclocal
工具生成aclocal.m4文件# 这一步依赖前一步得到的configure.ac文件
# 执行 aclocal 后生成 autom4te.cache 目录和aclocal.m4 文件
$ aclocal # 执行后无输出就是对的
autoconf
工具生成configure文件# 这一步依赖前一步得到的aclocal.m4文件
$ autoconf # 执行后无输出就是对的
autoheader
工具生成 config.h.in 文件# 这一步依赖第一步得到的 configure.ac 文件
$ autoheader # 执行后无输出就是对的
automake
工具生成Makefile.in文件automake --add-missing
# 执行后有如下输出:
configure.ac:11: installing './compile'
configure.ac:6: installing './install-sh'
configure.ac:6: installing './missing'
Makefile.am: installing './depcomp'
./configure
# 生成 Makefile
# 再执行 Make 即可得到最终编译好的程序