zoukankan      html  css  js  c++  java
  • automake

    在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“makeinstall”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。

    编译一个简单的源文件main.c,需要自动生成一个makefile,以下是步骤:

    第一步:

    ----------

    在/root/project/main目录下创建一个文件main.c,其内容如下:

    ------------------------------------------------

    #include<stdio.h>

    intmain(int argc, char** argv)

    {

    printf("Hello,Auto Makefile! ");

    return0;

    }

    ------------------------------------------------

    此时状态如下:

    [root@localhostmain]# pwd

    /root/project/main

    [root@localhostmain]# ls

    main.c

    [root@localhostmain]#

    第二步:

    ----------

    运行autoscan , 自动创建两个文件:autoscan.log configure.scan

    此时状态如下:

    [root@localhostmain]# autoscan

    [root@localhostmain]# ls

    autoscan.log configure.scan main.c

    [root@localhostmain]#

    第三步:

    ----------

    修改configure.scan的文件名为configure.in

    查看configure.in的内容:

    ------------------------------------------------

    # -*-Autoconf -*-

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

    AC_PREREQ(2.61)

    AC_INIT(FULL-PACKAGE-NAME,VERSION, BUG-REPORT-ADDRESS)

    AC_CONFIG_SRCDIR([main.c])

    AC_CONFIG_HEADER([config.h])

    #Checks for programs.

    AC_PROG_CC

    #Checks for libraries.

    #Checks for header files.

    #Checks for typedefs, structures, and compiler characteristics.

    #Checks for library functions.

    AC_OUTPUT

    ------------------------------------------------

    解读以上的文件:

    ------------------------------------------------

    # -*-Autoconf -*-

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

    #AC_PREREQ:

    # 确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版

    # 本比version要早,就在标准错误输出打印一条错误消息并不会创建configure。

    AC_PREREQ(2.61)

    #

    # 初始化,定义软件的基本信息,包括设置包的全称,版本号以及报告BUG时需要用的邮箱地址

    #

    AC_INIT(FULL-PACKAGE-NAME,VERSION, BUG-REPORT-ADDRESS)

    #

    # 用来侦测所指定的源码文件是否存在,来确定源码目录的有效性

    #

    AC_CONFIG_SRCDIR([main.c])

    #

    # 用于生成config.h文件,以便autoheader使用

    #

    AC_CONFIG_HEADER([config.h])

    #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

    ------------------------------------------------

    修改动作:

    1.修改AC_INIT里面的参数:AC_INIT(main,1.0, pgpxc@163.com)

    2.添加宏AM_INIT_AUTOMAKE,它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。

    3.在AC_OUTPUT后添加输出文件Makefile

    修改后的结果:

    ------------------------------------------------

    # -*-Autoconf -*-

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

    AC_PREREQ(2.61)

    AC_INIT(main, 1.0, pgpxc@163.com)

    AC_CONFIG_SRCDIR([main.c])

    AC_CONFIG_HEADER([config.h])

    AM_INIT_AUTOMAKE(main,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.

    AC_OUTPUT([Makefile])

    ------------------------------------------------

    第四步:

    运行aclocal, 生成一个“aclocal.m4”文件和一个缓冲文件夹autom4te.cache,该文件主要处理本地的宏定义。

    此时的状态是:

    [root@localhostmain]# aclocal

    [root@localhostmain]# ls

    aclocal.m4 autom4te.cacheautoscan.log configure.in configure.in~ main.c

    [root@localhostmain]#

    第五步:

    运行autoconf, 目的是生成 configure

    此时的状态是:

    [root@localhostmain]# autoconf

    [root@localhostmain]# ls

    aclocal.m4autoscan.log configure.in main.c

    autom4te.cacheconfigure configure.in~

    [root@localhostmain]#

    第六步:

    运行autoheader,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。

    此时的状态是:

    [root@localhostmain]# autoheader

    [root@localhostmain]# ls

    aclocal.m4autoscan.log configure configure.in~

    autom4te.cacheconfig.h.in configure.in main.c

    [root@localhostmain]#

    第七步:

    下面即将运行automake, 但在此之前应该做一下准备工作!

    首先

    创建一个Makefile.am.这一步是创建Makefile很重要的一步,automake要用的脚本配置文件是Makefile.am,用户需要自己创建相应的文件。之后,automake工具转换成Makefile.in。

    这个Makefile.am的内容如下:

    ------------------------------------------------

    AUTOMAKE_OPTIONS=foreign

    bin_PROGRAMS=main

    main_SOURCES=main.c

    ------------------------------------------------

    下面对该脚本文件的对应项进行解释。

    其中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU(在第1章中已经有所介绍)对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。

    bin_PROGRAMS定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。

    main_SOURCES定义“main”这个执行程序所需要的原始文件。如果”main”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。例如:若目标体“main”需要“main.c”、“sunq.c”、“main.h”三个依赖文件,则定义main_SOURCES=main.c sunq.c main.h。要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES。

    其次

    使用automake对其生成“configure.in”文件,在这里使用选项“—adding-missing”可以让automake自动添加有一些必需的脚本文件。

    运行后的状态是:

    ------------------------------------------------

    [root@localhostmain]# automake --add-missing

    configure.in:8:installing `./missing'

    configure.in:8:installing `./install-sh'

    Makefile.am:installing `./depcomp'

    [root@localhostmain]# ls

    aclocal.m4config.h.in configure.in~ main.c Makefile.in

    autom4te.cacheconfigure depcompMakefile.ammissing

    autoscan.logconfigure.in install-sh Makefile.am~

    [root@localhostmain]#

    ------------------------------------------------

    第八步

    运行configure,在这一步中,通过运行自动配置设置文件configure,把Makefile.in变成了最终的Makefile。

    运行的结果如下:

    ------------------------------------------------

    [root@localhostmain]# ./configure

    checkingfor a BSD-compatible install... /usr/bin/install -c

    checkingwhether build environment is sane... yes

    checkingfor a thread-safe mkdir -p... /bin/mkdir -p

    checkingfor gawk... gawk

    checkingwhether make sets $(MAKE)... yes

    checkingfor gcc... gcc

    checkingfor C compiler default output file name... a.out

    checkingwhether the C compiler works... yes

    checkingwhether we are cross compiling... no

    checkingfor suffix of executables...

    checkingfor suffix of object files... o

    checkingwhether we are using the GNU C compiler... yes

    checkingwhether gcc accepts -g... yes

    checkingfor gcc option to accept ISO C89... none needed

    checkingfor style of include used by make... GNU

    checkingdependency style of gcc... gcc3

    configure:creating ./config.status

    config.status: creating Makefile

    config.status:creating config.h

    config.status:executing depfiles commands

    [root@localhostmain]# ls

    aclocal.m4config.h.in configure.in main.c Makefile.in

    autom4te.cacheconfig.log configure.in~ Makefile missing

    autoscan.logconfig.status depcomp Makefile.am stamp-h1

    config.hconfigure install-sh Makefile.am~

    [root@localhostmain]#

    ------------------------------------------------

    第九步

    运行make,对配置文件Makefile进行测试一下

    此时的状态如下:

    ------------------------------------------------

    [root@localhostmain]# make

    cd .&& /bin/sh /root/project/main/missing --run aclocal-1.10

    cd .&& /bin/sh /root/project/main/missing --run automake-1.10 --foreign

    cd .&& /bin/sh /root/project/main/missing --run autoconf

    /bin/sh./config.status --recheck

    runningCONFIG_SHELL=/bin/sh /bin/sh ./configure --no-create --no-recursion

    checkingfor a BSD-compatible install... /usr/bin/install -c

    checkingwhether build environment is sane... yes

    checkingfor a thread-safe mkdir -p... /bin/mkdir -p

    checkingfor gawk... gawk

    checkingwhether make sets $(MAKE)... yes

    checkingfor gcc... gcc

    checkingfor C compiler default output file name... a.out

    checkingwhether the C compiler works... yes

    checkingwhether we are cross compiling... no

    checkingfor suffix of executables...

    checkingfor suffix of object files... o

    checkingwhether we are using the GNU C compiler... yes

    checkingwhether gcc accepts -g... yes

    checkingfor gcc option to accept ISO C89... none needed

    checkingfor style of include used by make... GNU

    checkingdependency style of gcc... gcc3

    configure:creating ./config.status

    /bin/sh./config.status

    config.status:creating Makefile

    config.status:creating config.h

    config.status:config.h is unchanged

    config.status:executing depfiles commands

    cd .&& /bin/sh /root/project/main/missing --run autoheader

    rm -fstamp-h1

    touchconfig.h.in

    makeall-am

    make[1]:Entering directory `/root/project/main'

    gcc-DHAVE_CONFIG_H -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.omain.c

    mv -f.deps/main.Tpo .deps/main.Po

    gcc -g-O2 -o main main.o

    cd .&& /bin/sh ./config.status config.h

    config.status:creating config.h

    config.status:config.h is unchanged

    make[1]:Leaving directory `/root/project/main'

    [root@localhostmain]# ls

    aclocal.m4autoscan.log config.h.in config.status configure.in depcomp main main.o Makefile.am Makefile.instamp-h1

    autom4te.cacheconfig.h config.log configure configure.in~ install-sh main.c MakefileMakefile.am~ missing

    [root@localhostmain]#

    ------------------------------------------------

    第十步

    运行生成的文件 main:

    ------------------------------------------------

    [root@localhostmain]# ./main

    Hello,Auto Makefile!

    [root@localhostmain]#

    本文出自 “2692627” 博客,请务必保留此出处http://2702627.blog.51cto.com/2692627/1262193

  • 相关阅读:
    深入Android 【一】 —— 序及开篇
    Android中ContentProvider和ContentResolver使用入门
    深入Android 【六】 —— 界面构造
    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the ser
    Dynamic Business代码片段总结
    对文件的BuildAction以content,resource两种方式的读取
    paraview 3.12.0 windows下编译成功 小记
    百度网盘PanDownload使用Aria2满速下载
    netdata的安装与使用
    用PS给证件照排版教程
  • 原文地址:https://www.cnblogs.com/zeng2013/p/4169561.html
Copyright © 2011-2022 走看看