autoscan学习记录

autoscan学习记录

autoscan学习记录

1 autoscan

1.1 结构

 1:                      -------------
 2:                     (   autoscan  )
 3:                      -------------
 4:    +----------------+          +----------------+           
 5:    | Source code    +--------->+ configure.scan |
 6:  p  +----------------+          +-------+--------+          
 7:                                        |
 8:                                        |
 9:                                ------- |
10:                               ( edit  )|
11:                                ------- |      -----------
12:                                        |     (  aclocal  )
13:                                        *      -----------
14:    +--------------+             +------+------+           +-------------+
15:    | Makefile.am  |             | configure.in+---------->+ aclocal.m4  |
16:    +--------------+             +-------------+           +-------------+
17:               \                    /    \                    /
18:                \   -----------    /      \   -----------    /
19:                 \ (  automake )  /        \ ( autoconf  )  /
20:                  \ -----------  /          \ -----------  /
21:                   \            /            \            /
22:                    \          /              \          /
23:                     *        *                *        *
24:                  +--------------+            +--------------+
25:                  | Makefile.in  |            | configure    |
26:                  +--------------+            +--------------+
27:                            \                   /
28:                             \                 /
29:                              \               /
30:                               \             /
31:                                \           /
32:                                 *         *
33:                               -------------
34:                              (  Makefile   )
35:                               -------------
36:  
37:  

1.2 autoscan

autoscan 是用来扫描源代码目录生成configure.scan文件的。autoscan可以用目录名做为参 数,但如果你不使用参数的话,那么autoscan将认为使用的是当前目录。autoscan将扫描你 所指定目录中的源文件,并创建configure.scan文件。

1.2.1 configure.scan   

configure.scan包含了系统配置的基本选项,里面都是一些宏定义。我们需要将它改名为 configure.in

生成的configure.scan示例:

 1:  #                                               -*- Autoconf -*-
 2:  # Process this file with autoconf to produce a configure script.
 3:  
 4:  AC_PREREQ(2.61)
 5:  AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
 6:  AC_CONFIG_SRCDIR([src/xlayout.h])
 7:  AC_CONFIG_HEADER([config.h])
 8:  
 9:  # Checks for programs.
10:  AC_PROG_CC
11:  
12:  # Checks for libraries.
13:  
14:  # Checks for header files.
15:  AC_PATH_X
16:  AC_HEADER_STDC
17:  AC_CHECK_HEADERS([stdlib.h string.h unistd.h])
18:  
19:  # Checks for typedefs, structures, and compiler characteristics.
20:  AC_C_CONST
21:  
22:  # Checks for library functions.
23:  
24:  AC_CONFIG_FILES([Makefile
25:                   src/Makefile])
26:  AC_OUTPUT

经修改的configure.in示例:

 1:  #                                               -*- Autoconf -*-
 2:  # Process this file with autoconf to produce a configure script.
 3:  
 4:  AC_PREREQ(2.61)
 5:  AC_INIT([xlayout], [0.8], grep@gamil.com)
 6:  AC_CONFIG_SRCDIR([src/xlayout.h])
 7:  AC_CONFIG_HEADER([src/config.h])
 8:  AC_CONFIG_FILES([Makefile src/Makefile])
 9:  
10:  # Checks for programs.
11:  AM_INIT_AUTOMAKE([-Wall -Werror foreign])
12:  AC_PROG_CC
13:  
14:  # Checks for libraries.
15:  
16:  # Checks for header files.
17:  AC_PATH_X
18:  AC_HEADER_STDC
19:  AC_CHECK_HEADERS([stdlib.h string.h unistd.h])
20:  AC_EGREP_HEADER(ease_multi, ease.h, AC_DEFINE(HAVE_EASE_MULTI, 1, [Define to 1 if you have ease_multi]))
21:  
22:  # Checks for typedefs, structures, and compiler characteristics.
23:  AC_C_CONST
24:  
25:  # Checks for library functions.
26:  AC_CHECK_LIB(ease, ease)
27:  AC_CHECK_LIB(X11, XOpenDisplay)
28:  AC_CHECK_LIB(Xmu, XmuClientWindow)
29:  
30:  AC_OUTPUT

1.2.2 aclocal   

aclocal是一个perl脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4 文件。 aclocal的定义是:"aclocal - create aclocal.m4 by scanning configure.ac"。

1.2.3 autoconf

autoconf是用来产生configure文件的。configure是一个脚本,它能设置源程序来适应 各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源 代码能在不同的操作系统平台上被编译出来。

产生了configure.in和aclocal.m4两个宏文件后,我们就可以使用autoconf来产生 configure文件了。

1.2.4 Makefile.am

Makefile.am是用来生成Makefile.in的,需要你手工书写。Makefile.am中定义了一些内 容:

示例:

1:  SUBDIRS = src
2:  DIST_SUBDIRS = src
3:  dist_doc_DATA = README
4:  man_MANS = man/xlayout.1
5:  EXTRA_DIST = man/xlayout.1 src/xlayout.h

1.2.5 automake

我们使用automake –add-missing来产生Makefile.in。

选项–add-missing的定义是"add missing standard files to package",它会让 automake加入一个标准的软件包所必须的一些文件。

我们用automake产生出来的Makefile.in文件是符合GNU Makefile惯例的,接下来我们只要执 行configure这个shell脚本就可以产生合适的Makefile文件了。

1.2.6 Makefile

在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作:

  • make

根据Makefile编译源代码,连接,生成目标文件,可执行文件。

  • make clean

清除上次的make命令所产生的object文件(后缀为".o"的文件)及可执行文件。

  • make install

将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。

  • make dist

产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打 包成一个tar.gz压缩的文件用来作为发布软件的软件包。

它会在当前目录下生成一个名字类似"PACKAGE-VERSION.tar.gz"的文件。PACKAGE和VERSION, 是我们在configure.in中定义的AMINITAUTOMAKE(PACKAGE, VERSION)。

  • make distcheck

生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文 件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件 包已经准备好,可以发布了。

  • distclean

类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。

Date: 2012-11-21 21:21:31 CST

Author: machine of awareness

Org version 7.8.06 with Emacs version 23

Validate XHTML 1.0
原文地址:https://www.cnblogs.com/machine/p/2781514.html