作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。
在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make install”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。本文构建的工程架构为:
sheepdog
----sheep
-----sheep.c
1.在sheepdog/sheep/目录下创建一个sheep.c,其内容如下:
#include <stdio.h>
int main(int argc, char** argv) { printf("Hello, Auto Makefile!\n"); return 0; }2.运行autoscan,自动创建两个文件:autoscan.log和configure.scan
3.修改configure.scan的文件名为configure.ac(或者configure.in),然后将内容改为如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.AC_PREREQ([2.68])
AC_INIT([sheepdog], [1.0], [zhang_zhang@live.com])# 用来侦测所指定的源码文件是否存在,来确定源码目录的有效性
AC_CONFIG_SRCDIR([sheep/sheep.c])
# 用于生成config.h文件,以便autoheader使用
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([sheepdog], [1.0])
# Checks for programs.
AC_PROG_CC# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# 创建输出文件。在`configure.in'的末尾调用本宏一次。
AC_OUTPUT([Makefile sheep/Makefile])
需要注意的是红色的部分,1.AM_INIT_AUTOMAKE是必须添加的东西,2.每个文件夹都需要生成Makefile文件
4. 运行 aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义
5. 运行 autoconf, 目的是生成 configure
6. 运行 autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件
7. 在sheedog和sheep目录分别创建Makefile.am,其内容分别为:
SUBDIRS= sheep
和
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=sheep
sheep_SOURCES=sheep.c
其中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU(在第1章中已经有所介绍)对自己发布的软件有严格的规范,比如必须附 带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用 户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。
8. 运行automake --add-missing
9. 运行configure
10. make && make install
11.在sheepdog/sheep目录下就可以运行sheep了
9. 运行 touch NEWS README AUTHORS ChangeLog