2015年12月24日 19:01:26
这个其实是个子篇。整体见 Makefile 自动生成
在进入正文之前先通过下图对操作步骤及其中的依赖关系有个大致的概念,理解起来更容易:
Flat 目录结构:
创建 hello 目录,在目录下新建一个简单的打印程序 hello.c ;
运行
autoscan
命令,产生 configure.scan 文件(忽略 ./tmp目录)执行后在 hello 目录下会多出两个文件:configure.log 和 configure.scan。对我们有用的是后者,我们可以拿它作为 configure.in 的蓝本。(为了下文中容易对比,将 autoscan.log 文件删除)
将 configure.scan 文件重命名为 configure.in,并修改 configure.in 文件。按下面的内容修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
#AC_INIT([2.63])
AC_INIT([hello], [1.0], [**@126.com])
AC_CONFIG_SRCDIR([hello.c])
#AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(hello, 1.0)
# Check for programs
AC_PROG_CC
# Check for libraries
# Check for header files
# Check for typedefs, structures, and compiler characteristics.
# Check for library functions.
AC_OUTPUT(Makefile)运行
aclocal
命令,产生 aclocal.m4 文件执行后在 hello 目录下多出两个文件/文件夹:aclocal.m4 和 autom4te.cache。对我们有用的是前者,(为了下文中容易对比,将 autom4te.cache 删除)
运行
autoconf
命令,产生 confingure 文件执行后在 hello 目录下生成了 configure,(为了下文中容易对比,将
aclocal.m4、autom4te.cache 和configure.in删除)在 hello 目录下新建 Makefile.am 文件,内容如下:
1
2
3AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c运行
automake -a
命令(也可automake --adding-missing
)执行后,产生一些文件,其中最重要的是 Makefile.in。此命令除了依赖 Makefile.am 和 configure.in 文件,还依赖 aclocal.m4 文件。(见本节末尾最后一张图)
运行
./confiugre
脚本,产生 Makefile 文件我们要的 Makefile 文件终于现身了。
执行
make
命令
到此正式结束。另外,make
命令依赖以下几个文件(见本节末尾倒数第二张图)
综上,在执行每个步骤时,之前的所有步骤生成的文件基本上都有用,没有文件是可以删除、需要删除的。就这么乱着吧。
整理此节笔记参考:automake,autoconf使用详解、(其中关于.in文件语法,命令参数意义等还需整理)
图1
图2