使用autotools生成makefile文件入门

来源:Linuxeden 作者:mgqw
      上周小月发表了一篇文章:GNU编程入门最佳实例 - GNU HELLO,我抱着学习的心态过去下载看了看,评语只有九个字:傻大笨粗,新人的天书。一个helloworld能弄得这么复杂,还是全E文的,不吓跑新手才怪。于是我自己写了一个尽量简单的例子,示范linux下那些 configure && make && make install的源码软件是如何生成的。

autotools是一系列工具集,要使用这些工具当然首先要确认系统已经安装了下列工具:
    autoscan
    aclocal
    autoconf
    autoheader
    automake
使用命令which ooxx可查看到命令的路径,如果没有就没装,用命令rpm -qa | grep automake 和命令rpm -qa | grep autoconf 看哪个包没有装(debin系列的就用类似的dpkg包管理命令查看)。
How autotools fits together

    要说入门当然是使用路人皆知的hello world程序作为示范代码了:

//hello.c
#include <stdio.h>
#include <sys/time.h>
int main(void)
{
    double sec;
    struct timeval tv;

    gettimeofday(&tv, NULL);
    sec = tv.tv_sec;
    sec += tv.tv_usec/1000000.0;
    printf ("hello word!\nsec = %e\n", sec);
    return 0;
}


    程序文件hello.c放在test目录中,确保此目录只有hello.c一个文件,下面就开始autotools旅程:
   
    1:

运行命令$ autoscan 生成文件configure.scan,修改configure.scan,修改后文件内容如下(红色修改,蓝色添加):

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.61)
AC_INIT(hello, 1.0)
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.
AC_CHECK_HEADERS([sys/time.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_TIME

# Checks for library functions.
AC_CHECK_FUNCS([gettimeofday])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT


相对原文件,其实就是修改了一行,添加了两行:
AC_INIT(hello,1.0)
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_FILES([Makefile])

修改文件完毕后,为文件改名 $ mv configure.scan configure.in





    2:

运行命令$ aclocal 生成aclocal.m4

    3:
运行命令$ autoconf 生成configure

    4:
运行命令$ autoheader 生成config.h.in,使程序可移植


    5:
创建空文件Makefile.am,写入内容:

bin_PROGRAMS= hello
hello_SOURCES= hello.c


    6:
运行命令$ automake --add-missing   生成configure.in文件

    7:
不出意外的话,其实到上面都已经完成所有步骤了,下面就是编译运行软件三步曲:  configure  &&  make  &&  make install
这里没必要make install,直接运行当前目录下的hello文件即可:
[mgqw@localhost test]$ ./hello
hello word!
sec = 1.244798e+09
   
结束语:
    上面的步骤只是简单介绍了autotools的使用过程,其中具体含义以及其他功能上百度/狗狗一搜一大把,记住百度/狗狗永远是我们最好的老师。
   

时间:2009-06-12 18:03 来源:Linuxeden 作者:mgqw 原文链接

好文,顶一下
(12)
63.2%
文章真差,踩一下
(7)
36.8%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量