正如前面所言,autotools是系列工具,读者首先要确认系统是否装了以下工具(可以用which命令进行查看)。
n aclocal
n autoscan
n autoconf
n autoheader
n automake
使用autotools主要就是利用各个工具的脚本文件以生成最后的makefile。其总体流程是这样的。
n 使用aclocal生成一个“aclocal.m4”文件,该文件主要处理本地的宏定义;
n 改写“configure.scan”文件,并将其重命名为“configure.in”,并使用autoconf文件生成configure文件。
[root@localhost automake]# autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
[root@localhost automake]# ls
autoscan.log configure.scan hello.c
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
#The next one is modified by david
#AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
AC_INIT(hello,1.0)
# The next one is added by david
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([makefile])
AC_OUTPUT
下面对这个脚本文件进行解释。
n 以“#”号开始的行是注释。
n AC_PREREQ宏声明本文件要求的autoconf版本,如本例使用的版本2.59。
n AC_INIT宏用来定义软件的名称和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一般为作者的E-mail。
n AM_INIT_AUTOMAKE是笔者另加的,它是automake所必备的宏,使automake自动生成makefile.in,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。
n AC_CONFIG_SRCDIR宏用来检查所指定的源码文件是否存在,以及确定源码目录的有效性。在此处源码文件为当前目录下的hello.c。
n AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。
n AC_CONFIG_FILES宏用于生成相应的makefile文件。
n 中间的注释之间可以分别添加用户测试程序、测试函数库、测试头文件等宏定义。
下面对该脚本文件的对应项进行解释。
n 其中的AUTOMAKE_OPTIONS为设置automake的选项。GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了3种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。在本示例中采用foreign等级,它只检测必须的文件。
n bin_PROGRAMS定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。
n hello_SOURCES定义“hello”这个执行程序所需要的原始文件。如果“hello”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。例如:若目标体“hello”需要“hello.c”、“david.c”、“hello.h”三个依赖文件,则定义hello_SOURCES=hello.c david.c hello.h。要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES。
[root@localhost automake]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
configure: creating ./config.status
config.status: creating makefile
config.status: executing depfiles commands