|
//*************************************************************
译序
初学linux系统,感觉linux底下的编译,链接程序真的很麻烦。
因此想到了用Autoconf等工具。找到了Autobook这本好书。
也不知道有没有人翻译过这本书。
该书由女友Ellen翻译,在此对她表示感谢。
该书原文请参考 http://sources.redhat.com/autobook/...tobook_toc.html
如果翻译时有什么错误请
Ellengut2002@yahoo.com或者jasongut2002@126.com
转载请保留译序,3x.
//***************************************************************
5. 最小的GNU Autotools工程
本章节描述如何管理使用GNU Autotools的最小工程。所谓的最小工程是指使用这些工具时可能的最小工程,但是它还能用实例解释足够数量的规则。学习的工程越小,当更大的工程要求先进的特性时就越容易理解这些工具之间复杂的相互作用。
本章节中作为实例使用的工程是叫做foonly的伪指令解释器。foonly是用C语言编写的。像许多解释器一样,它使用用lex、yacc工具表示的词汇分析器和解析器。该软件包开发过程中将遵循GNU `Makefile'标准——Automake的缺省行为。
这个小工程并没有利用GNU Autotools的许多其他特性。其中最有用的特性是库。这个软件包不产生它自己的库,因此本章节不具体描述Libtool。在9. A Small GNU Autotools Project 和 12. A Large GNU Autotools Project中描述的更复杂的工程将展示Libtool如何在build 系统中起作用。本章节的目的在于概述用户编写的文件以及它们之间如何相互作用。
5.1 用户提供的输入文件
最小工程要求用户只要提供两个文件。创建软件包时所需的其他文件将由GNU Autotools产生(参见5.2 Generated Output Files)。
`Makefile.am'是 automake的输入文件 。
`configure.in'是 autoconf的输入文件。
我认为`Makefile.am'是工程创建要求的一个高层次、精练的细化:需要创建什么?它又将被安装到何处? 也许Automake'的最大优势就在于——尽可能简单的描述,但是作为最终产品的 Makefile'则带有一系列便利的make目标。
`configure.in'是宏调用模板和碎片被autoconf用来产生`configure'脚本的shell代码(参见C. Generated File Dependencies)。autoconf将configure.in'的内容拷贝到`configure'中。这样的话,当宏出现在输入中时就对它们进行扩展。其他的文本将逐字拷贝。
让我们看一下与这个最小工程有关的用户提供的输入文件内容。下面是Makefile.am':
//++++++++++++++++++++
bin_PROGRAMS = foonly
foonly_SOURCES = main.c foo.c foo.h nly.c scanner.l parser.yfoonly_LDADD = @LEXLIB@
//++++++++++++++++++++++
这个`Makefile.am'规定了我们想要创建名为`foonly的程序,并且当make install '运行时将它安装在`bin'目录中。用于创建的foonly'源文件是C语言源文件`main.c', `foo.c', `nly.c',`scanner.l'的lex程序以及parser.y'的yacc语法。这也指出了Automake的一个优势:因为lex和yacc都从它们的输入文件中产生中间的C语言程序,所以Automake知道如何创建这样的中间文件并将它们链接到最终的可执行文件。最后,如果`configure'认为需要lex库,我们必须记得链接一个合适的lex库。
下面是`configure.in'文件:
//++++++++++++++++
dnl Process this file with autoconf to produce a configure script.
AC_INIT(main.c)
AM_INIT_AUTOMAKE(foonly, 1.0)
AC_PROG_CC
AM_PROG_LEX
AC_PROG_YACC
AC_OUTPUT(Makefile)
//++++++++++++++++
这个`configure.in'激活了一些必要的Autoconf和Automake初始化宏,然后从AC_PROG系列中调用一些Autoconf宏以便找到合适的C编译器,lex和yacc程序。最后AC_OUTPUT宏被用于产生`configure'脚本来输出一个`Makefile'文件。但是从何处呢?它是通过处理Makefile.in中而产生,而这个Makefile.in是由Automake基于你的`Makefile.am'产生的(参见C. Generated File Dependencies)。 |
|