autoconf/automake工具包

     不知道现在人是懒了还是怎么了都使用这玩意,难道自己不会写makefile吗?我一直觉得makefile书写简单点就好了,就不要用atuomake 之类的工具了。今天同事给了我一个测试程序,就两个文件然后用automake工具生成makefile,我自己又加了一个文件,我自己都不知道如何编译。所以不得已对automake工具简单的研究了下。

(1) 简介

  Autoconf/Automake工具用于自动创建功能完善的makefile文件。当前大多数软件包都是用这一工具生成makefile文件的。Autoconf/Automake工具组主要包括autoconf、automake、perl语言环境和m4。

现在大多linux 系统 默认已经安装了上述包,没有安装包的在ubuntu 中 sudo apt-get install 安装。

  可以用命令查看是否安装  rpm -qa |grep autoconf  

  可以用命令查看安装路径 whereis  autoconf  

(2)生成makefile的步骤

  1> 创建源代码文件,使用"autoscan"生成configure.scan文件,将其重命名为configure.ac,并做适当修改

  2>   使用"aclocal"命令生成aclocal.m4文件

  3>   使用"autoconf"命令由configure.ac和aclocal.m4文件生成configure文件。

  4>   手工编辑Makefile.am文件,使用"automake"命令生成configure.in文件。

  5>   手工编辑或由系统给定acconfig.h文件,使用"autoheader"命令生成config.h.in文件。

  6>  使用"configure"命令由configuer、configure.in和config.h.in文件生成Makefile文件。

(3) 实例讲解

  假设项目工程目录为:  xxx\Hello  项目包含的源文件为:main.c    hello.c    hello.h

  1> 在项目目录Hello下,通过运行autoscan,从而创建configure.scan、autoscan.log文件

  2 > 把生成的configure.scan文件重命名为configure.in ,并对它进行修改

  将 AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) 注释  即 #AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])   

   将 AC_CONFIG_SRCDIR([hello.h])  修改为 AC_CONFIG_SRCDIR([main.c])    //主程序

  文件末尾增加下面几行:   

  AC_INIT(Hiworld,1.0)        //生成程序名称版本

  AM_INIT_AUTOMAKE(Hiworld,1.0) 

  AC_CONFIG_FILES([Makefile])   //config 文件生成的文件名 也就是生成makefile

  3> 运行aclocal 产生aclocal.m4文件和autom4te.cache目录

  4> 运行autoconf产生configure文件

  5> 运行autoheader产生config.h.in文件

  6> 创建文件Makefile.am

  输入下面内容

    AUTOMAKE_OPTIONS=foreign       //默认参数

    bin_PROGRAMS=hworld         //生成可执行程序 

    hworld_SOURCES=main.c hello.c hello.h   //源程序

  7 > 运行automake  --add-missing 产生文件Makefile.in 和链接depcomp、install-sh、missing

  8> 运行./configure 产生文件Makefile

  9> 运行make产生可执行文件hworld

  10> 运行make  install,则对hworld进行安装

(4) 杂谈

  大部分开源软件包都使用automake 工具,所以我们一般学习或者从源码安装软件包的时候 执行以下步骤。

    1> /configure 

  2> make

      3> make  install

 

更多内容可以查看博客 http://www.ibm.com/developerworks/cn/linux/l-makefile/

posted @ 2013-08-04 17:27  皁仩腄覺  阅读(468)  评论(0编辑  收藏  举报