• Automake基本用法


    一. 确认你的系统安装有GNU的如下软件:

    1. automake
    2. autoconf
    3. m4
    4. perl
    5. 如果你需要产生共享库(shared library)则还需要GNU Libtool

    二. 用automake生成Makefile的步骤如下:

    1. 由源文件通过autoscan命令生成configure.scan,然后修改configure.scan并重命名为configure.in
    2. 由aclocal命令生成aclocal.m4
    3. 由autoconf命令生成configure
    4. 编辑一个Makefile.am(基本是一系列make的宏定义,偶尔也会出现make规则),由automake命令生成Makefile.in
    5. 执行./configure生成Makefile

    三. automake支持三种目录层次:flat、shallow和deep。

    * flat包指的是所有文件都在一个目录中的包。为这类包提供的Makefile.am不需要SUBDIRS这个宏。所有源文件及自己写的头文件都位于当前目录里面,没有子目录。
    * deep包指的是所有的源代码都被储存在子目录中的包,顶层目录主要包含配置信息。deep包的顶层Makefile.am将包括宏SUBDIRS,但没有其它定义需要创建的对象的宏。所有源文件及自己写的头文件都位于当前目录的一个子目录里面,而当前目录里没有任何源文件。
    * shallow包指的是主要的源代码储存在顶层目录中,而各个部分(典型的是库)则储存在子目录中的包。主要源文件在当前目录里,而其它一些实现各部分功能的源文件各自位于不同目录。

    四. 下面以一个例子说明shallow层次结构的源文件如何自动生成Makefile文件。

    例子源程序结构如下:
    hello是我们的工作目录,hello目录下有main.c和comm、tools、db、network、interface等五个目录。 comm目录下有comm.c和comm.h,tools目录下有tools.c和tools.h,同样其它目录分别有db.c、db.h、network.c、network.h、interface.c、interface.h。

    按照如下步骤来自动生成Makefile:
    1. autoscan
    生成configure.scan文件

    2. mv configure.scan 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_INIT(hello.c, 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.

    # Checks for typedefs, structures, and compiler characteristics.

    # Checks for library functions.

    AC_OUTPUT(Makefile)

    configure.in文件内容是一系列GNU m4 的宏,这些宏经autoconf处理后会变成检查系统特性的shell scripts。configure.in内宏的顺序并没有特别的规定,但每一个configure.in文件必須在所有宏前加入AC_INIT宏,然后在所有宏的最后加上AC_OUTPUT宏。可先用autoscan扫描原始文件以产生一个 configure.scan 文件,再对 configure.scan 做些修改成 configure.in 文件。

    3. aclocal
    生成aclocal.m4文件

    4. autoconf
    生成可执行的configure文件

    5. 编辑一个Makefile.am文件,内容如下:
    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=hello
    hello_SOURCES=main.c comm/comm.c comm/comm.h tools/tools.c tools/tools.h db/db.c db/db.h network/network.c network/network.h interface/interface.c interface/interface.h
    # 如果定义多个执行文件,则对每个执行程序都要定义相对的filename_SOURCES
    这样最后将利用上述hello_SOURCES源文件生成hello程序。

    6. automake --add-missing
    生成Makefile.in

    7. ./configure
    生成Makefile
    make
    make install
    make clean
    make distclean (连Makefile也清掉)
    make dist (创建一个名为PACKAGE-VERSION.tar.gz的发行版)

    图解:

    文章摘自:   http://hi.baidu.com/red_woods/item/951544e6cb24aed3ea34c94f

    其他资源:   http://www.cnblogs.com/ericdream/archive/2011/12/09/2282359.html

            http://www.ibm.com/developerworks/cn/linux/l-makefile/

    Automake:  https://www.gnu.org/software/automake/

  • 相关阅读:
    BadUSB 利用
    java 将函数作为参数传递
    odoo12 修行提升篇之 常用的高阶函数 (二)
    odoo12 修行提升篇之 异步定时任务 (一)
    odoo12 修行基础篇之 利用kanban做分析 点击跳转分析模型列表 (九)
    odoo12 修行基础篇之 kanban (八)
    odoo12 修行基础篇之 记录批处理 (七)
    odoo12 修行基础篇之 列表的筛选和分组 (六)
    odoo12 修行基础篇之 添加记录编码 (五)
    odoo12 修行基础篇之 添加工作流和操作记录 (四)
  • 原文地址:https://www.cnblogs.com/yangtze736-2013-3-6/p/3458142.html
Copyright © 2020-2023  润新知