automake之简单的例子

作为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

posted @ 2013-01-04 10:41  zaleilynn  阅读(313)  评论(0编辑  收藏  举报