Automake 之 Flat 目录机构

2015年12月24日 19:01:26

这个其实是个子篇。整体见 Makefile 自动生成

在进入正文之前先通过下图对操作步骤及其中的依赖关系有个大致的概念,理解起来更容易:

流程图

  1. 创建 hello 目录,在目录下新建一个简单的打印程序 hello.c ;
  2. 运行 autoscan 命令,产生 configure.scan 文件(忽略 ./tmp目录)

    configure.scan

    执行后在 hello 目录下会多出两个文件:configure.log 和 configure.scan。对我们有用的是后者,我们可以拿它作为 configure.in 的蓝本。(为了下文中容易对比,将 autoscan.log 文件删除)

  3. 将 configure.scan 文件重命名为 configure.in,并修改 configure.in 文件。按下面的内容修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    #AC_INIT([2.63])
    AC_INIT([hello], [1.0], [**@126.com])
    AC_CONFIG_SRCDIR([hello.c])
    #AC_CONFIG_HEADERS([config.h])
    AM_INIT_AUTOMAKE(hello, 1.0)
    # Check for programs
    AC_PROG_CC
    # Check for libraries
    # Check for header files
    # Check for typedefs, structures, and compiler characteristics.
    # Check for library functions.
    AC_OUTPUT(Makefile)
  4. 运行 aclocal 命令,产生 aclocal.m4 文件

    aclocal.m4

    执行后在 hello 目录下多出两个文件/文件夹:aclocal.m4 和 autom4te.cache。对我们有用的是前者,(为了下文中容易对比,将 autom4te.cache 删除)

  5. 运行 autoconf 命令,产生 confingure 文件

    confingure

    执行后在 hello 目录下生成了 configure,(为了下文中容易对比,将 aclocal.m4 、autom4te.cache 和 configure.in 删除)

  6. 在 hello 目录下新建 Makefile.am 文件,内容如下:

    1
    2
    3
    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=hello
    hello_SOURCES=hello.c
  7. 运行 automake -a 命令(也可 automake --adding-missing

    automake

    执行后,产生一些文件,其中最重要的是 Makefile.in。此命令除了依赖 Makefile.am 和 configure.in 文件,还依赖 aclocal.m4 文件。(见本节末尾最后一张图)

  8. 运行 ./confiugre 脚本,产生 Makefile 文件

    Makefile

    我们要的 Makefile 文件终于现身了。

  9. 执行 make 命令

    hello

到此正式结束。另外,make 命令依赖以下几个文件(见本节末尾倒数第二张图)

综上,在执行每个步骤时,之前的所有步骤生成的文件基本上都有用,没有文件是可以删除、需要删除的。就这么乱着吧。

整理此节笔记参考:automake,autoconf使用详解、(其中关于.in文件语法,命令参数意义等还需整理)

图1

图1

图2

图2