精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 软件开发>>没有规矩,不成方圆----文档与标准化>>AutoMake简要说明——目录>>AutoMake简要说明(5)

主题:AutoMake简要说明(5)
发信人: dingdang()
整理人: zelor(2001-11-27 10:40:26), 站内信件
第一节, 上一节, 下一节, 最后一节, 回到目录 
----------------------------------------------------------------------
----------

扫描`configure.in'


Automake扫描`configure.in'文件以得到软件包的有关信息。在`configure.in'
中必须执行一些autoconf宏及定义一些变量。 

Automake还提供了一些autoconf宏以使维护工作更容易些。可使用aclocal程序自
动将这些宏放入`aclocal.m4'文件。 

配置要求
符合基本Automake要求的最简单的方法就是使用 AM_INIT_AUTOMAKE宏(参见 Aut
omake提供了Autoconf宏)。当然,你也可以手工完成所需的工作: 

使用AC_SUBST宏来定义变量PACKAGE和 VERSION PACKAGE是要发布的软件包的名字
。例如,Automake就将 PACKAGE定义为`automake'。 VERSION是当前发布的版本
号。 Automake对PACKAGE或VERSION的值不作任何解释,除非在`Gnits'模式下(参
见 gnu和gnits 的影响)。 
使用AC_ARG_PROGRAM宏(若需要安装一个程序或脚本)。 
使用AC_PROG_MAKE_SET宏(若软件包不是flat模式)。 
使用AM_SANITY_CHECK宏以保证编译环境是健全的(sane)。 
使用AM_PROG_INSTALL宏(若软件包需要安装任何脚本,参见可执行的脚本),否则
,应使用AC_PROG_INSTALL宏。 
使用AM_MISSING_PROG宏来检查aclocal、 autoconf、automake、autoheader和 
makeinfo等程序是否位于编译环境。下面是具体的做法: 
missing_dir=`cd $ac_aux_dir && pwd`
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)

下面是Automake需要的其它一些宏,但并未由 AM_INIT_AUTOMAKE自动执行: 

AC_OUTPUT 
决定Automake将生成哪些文件。文件清单中名字为Makefile 将被当作`Makefile
',对其它的文件的处理会有所不同。目前只有一处不同:`Makefile'文件将被m
ake distclean 清除,而其它文件则被make clean清除。 
Automake可识别的其它东西
AC_CONFIG_HEADER 
类似AC_CONFIG_HEADER,但可完成一些与Automake相关的工作。 
AC_CONFIG_AUX_DIR 
Automake会在它指定的目录中查找一些辅助的脚本,比如`mkinstalldirs' , 如
果没有,则会在它们"标准"的位置中查找(可能是最上层的源码目录,也可能是与
当前`Makefile.am'对应的源码目录)。 
AC_PATH_XTRA 
在编译C程序或库时,Automake会在每个`Makefile.in'中插入 AC_PATH_XTRA中的
变量定义。 
AC_CANONICAL_HOST 
AC_CHECK_TOOL 
Automake将保证`config.guess'和`config.sub'是存在的。同时,将引入用于`M
akefile'的变量`host_alias'和 `host_triplet'。 
AC_CANONICAL_SYSTEM 
类似AC_CANONICAL_HOST,但还定义了用于 `Makefile'的变量`build_alias'和 
`target_alias'。 
AC_FUNC_ALLOCA 
AC_FUNC_GETLOADAVG 
AC_FUNC_MEMCMP 
AC_STRUCT_ST_BLOCKS 
AC_FUNC_FNMATCH 
AM_FUNC_STRTOD 
AC_REPLACE_FUNCS 
AC_REPLACE_GNU_GETOPT 
AM_WITH_REGEX 
Automake将保证为这些宏对应的目标生成适当的依赖信息。同时, Automake将检
查发布中是否包含适当的源文件。请注意Automake 并不随任何需要这些宏的C源
码文件一起发布,所以automake -a 将不会安装源码文件。参见 创建库文件。 

LIBOBJS 
Automake会检测那些将`.o'文件放入LIBOBJS 的语句,并将这些额外的文件看作
是通过AC_REPLACE_FUNCS 发现的文件。 
AC_PROG_RANLIB 
仅用于创建库文件。 
AC_PROG_CXX 
仅用于C++源文件。 
AM_PROG_LIBTOOL 
Automake将打开对libtool的处理。 
AC_PROG_YACC 
若软件包中包含了Yacc源文件,则必须调用这个宏或在 `configure.in'中定义`
YACC'变量。最好用第一种方法。 
AC_DECL_YYTEXT 
仅在软件包中有Lex源文件时使用。 
AC_PROG_LEX 
若软件包中包含了Lex源文件,则必须调用这个宏。 
ALL_LINGUAS 
若Automake在`configure.in'中发现此变量被设置,则会检查 `po'目录以确保所
有列出的`.po'文件都存在,以及该目录下的所有`.po'文件都在文件清单中。 

AM_C_PROTOTYPES 
仅当使用自动de-ANSI-fication时才有用,参见 Automatic de-ANSI-fication.
 
AM_GNU_GETTEXT 
This macro is required for packages which use GNU gettext (see section
 Gettext). It is distributed with gettext. If Automake sees this macro
 it ensures that the package meets some of gettext's requirements. 
AM_MAINTAINER_MODE 
为configure自动加上`--enable-maintainer-mode' 选项。若使用了这个宏,au
tomake将在生成的`Makefile.in' 中将关闭"maintainer-only"规则作为默认值。
在`Gnits'模式下不允许使用这个宏。(参见gnu和 gnits的影响)。 
AC_SUBST 
AC_CHECK_TOOL 
AC_CHECK_PROG 
AC_CHECK_PROGS 
AC_PATH_PROG 
AC_PATH_PROGS 
在每个生成的`Makefile.in'文件中,上面这些宏的第一个参数都被自动定义为一
个变量。 
自动生成aclocal.m4
Automake包括了一些Autoconf宏,在某些情况下部分宏实际上是由 Automake使用
的。这些宏必须在你的`aclocal.m4'文件中定义,否则autoconf将无法找到它们
。 

aclocal程序可根据`configure.in'的内容自动生成 `aclocal.m4'文件。同时,
aclocal机制还可被扩展以用于其它的软件包。 

一开始,aclocal会扫描所有的`.m4'文件来查找宏定义。然后它扫描`configure
.in'文件。所有它找到的宏都会被放入`aclocal.m4'。 

如果`acinclude.m4'文件存在,则其内容也会被放入 `aclocal.m4'。这就允许将
一些局部宏放入`configure'。 

aclocal有下面这些选项: 

--acdir=dir 
在指定的dir目录而不是安装目录中查找宏定义。多用于调试。 
--help 
打印帮助信息。 
-I dir 
将dir目录也列入查找`.m4'文件的目录清单。 
--output=file 
指定输出文件名,默认为`aclocal.m4'。 
--verbose 
打印工作过程的详细信息。 
--version 
打印当前版本号。 
Automake提供的Autoconf宏
AM_CONFIG_HEADER 
使Automake生成规则以自动重新生成配置头文件,此时你必须在源码目录下创建
`stamp-h.in',可以是一个空文件。 
AM_CYGWIN32 
检查当前的configure是否运行在`Cygwin32' 环境下。如果是,则定义输出变量
EXEEXT为`.exe';否则,将该变量定义为空串。在`Cygwin32'环境下,即使没有
使用这个宏,gcc所生成的可执行文件也会自动加上 `.exe'扩展名。Automake在
`Makefile.in'加入了一些特别的代码可以更友好地做到这一点。 
AM_FUNC_STRTOD 
如果strtod函数不存在,或无法正常工作(比如SunOS 5.4), 则将`strtod.o'添加
到输出变量LIBOBJS。 
AM_FUNC_ERROR_AT_LINE 
若error_at_line函数不存在,则将`error.o' 添加到变量LIBOBJS。 
AM_FUNC_MKTIME 
检查mktime函数是否可用,否则将`mktime.o' 添加到变量`LIBOBJS'。 
AM_FUNC_OBSTACK 
检查GNU的obstack等函数是否可用,否则将`obstack.o' 添加到变量`LIBOBJS'。
 
AM_C_PROTOTYPES 
检查编译器是否识别所使用的函数原型。若是,则定义`PROTOTYPES' 变量并将输
出变量`U'和`ANSI2KNR'设为空串。否则,将`U'设为`_',并将`ANSI2KNR' 设为
`./ansi2knr'。Automake利用这些值来实现自动de-ANSI-fication。 
AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL 
如果TIOCGWINSZ需要`<sys/ioctl.h>',则定义GWINSZ_IN_SYS_IOCTL;否则,TI
OCGWINSZ 将在`<termios.h>'中定义。 
AM_INIT_AUTOMAKE 
自动运行大部分`configure.in'所需的宏。需两个参数:软件包名称和版本号。
默认情况下,它调用AC_DEFINE 定义`PACKAGE'和`VERSION',若第三个参数为非
空,则不会这么做。 
AM_PATH_LISPDIR 
搜索emacs程序,若找到,则将输出变量 lispdir设为Emacs的site-lisp目录。 

AM_PROG_CC_STDC 
如果所用的C编译器的默认模式不是ANSI C,则应在变量CC 中增加选项以保证这
一点。如果你的程序是按ANSI C写的,可用 ansi2knr选项使其变成非ANSI的。 

AM_PROG_INSTALL 
类似AC_PROG_INSTALL,但同时定义了INSTALL_SCRIPT。 
AM_SANITY_CHECK 
检查build目录下的文件一定比源码目录下的文件新。这个宏可由 AM_INIT_AUTO
MAKE自动执行。 
AM_SYS_POSIX_TERMIOS 
检查系统中POSIX的termios头文件和函数是否可用。若是,则将shell变量 am_c
v_sys_posix_termios设为`yes',否则设为 `no'。 
AM_TYPE_PTRDIFF_T 
如果`<stddef.h>'中定义了类型`ptrdiff_t',则定义变量`HAVE_PTRDIFF_T'。 

AM_WITH_DMALLOC 
增加对dmalloc包的支持。dmalloc包位于: ftp://ftp.letters.com/src/dmallo
c/dmalloc.tar.gz 
AM_WITH_REGEX 
在configure的命令行增加`--with-regex'选项。若使用了这个宏(默认),则使
用`regex'正规表达式库, `regex.o'被添加到`LIBOBJS',并定义变量 `WITH_R
EGEX'。若指定了`--without-regex',则使用`rx'库,且`rx.o'被添加到`LIBOB
JS'。 
编写自己的aclocal宏
Aclocal实际上不了解任何宏的内部情况,所以你很容易编写自己的宏来对它进行
扩展。 

这对那些需要提供自己的Autoconf宏给给其它程序使用的库最有用。例如 gette
xt库提供了一个AM_GNU_GETTEXT宏可被用于那些想要使用gettext的软件包。当安
装这些库时,会同时安装这些宏以便aclocal可以找到它们。 

宏文件可以是一系列的AC_DEFUN。Aclocal还可以理解 AC_REQUIRE,所以可以将
每个宏放在一个单独的文件中。 

宏文件的扩展名必须是`.m4',且必须安装在 `$(datadir)/aclocal'目录下。 



----------------------------------------------------------------------
----------
第一节, 上一节, 下一节, 最后一节, 回到目录 

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.84.141]

[关闭][返回]