(转载)Auto book 中文版(三)

2009-05-13 07:47:40来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


5. 一个很小的 GNU Autotools 项目
本章节描述如何通过 GNU Autotools 来管理一个很小的项目。所谓小项目是指一个非常小,但又能演示足够多相关概念的项目。通过研究一个小一点的项目,可以更容易理解这些工具之间复杂的相互作用,当处理需要更多功能的大项目时用得到。
本章中作为实例使用的工程是叫做 foonly 的伪指令解释器。foonly 是用 C 语言编写的。像许多解释器一样,它使用 lex、yacc 等工具表示的词法分析器和解析器。我们开发该软件包时会使其遵循 GNU `Makefile' 标准,这也是 Automake 的缺省行为。
这个小工程并没有使用 GNU Autotools 的许多其他特性。其中最有用的是库,这个软件包不产生它自己的库,因此本章节不具体描述 Libtool。在
A Small GNU Autotools Project

A Large GNU Autotools Project
中会展示 Libtool 是如何在构建系统中发挥作用的。本章节的目的在于在较高的层次上描述用户编写的文件以及它们之间是如何相互作用的。

5.1 用户提供的输入文件
最小项目只要求用户提供两个文件,创建软件包时所需的其他文件将由 GNU Autotools 产生(see section
产生的输出文件
)。

  • `Makefile.am' 是 automake 的输入文件。
  • `configure.in' 是 autoconf 的输入文件。

我认为 `Makefile.am' 是对工程构建需要的一个高层次、精练的描述:需要构建什么,它又将被安装到何处?也许 Automake 的最大优势就在于尽可能简单的描述,但是作为最终产品的 `Makefile' 则带有一系列便利的 make 目标。
`configure.in' 是由宏调用和 shell 片段组成的模板,autoconf 通过它来产生一个 `configure' 脚本(see section
Generated File Dependencies
)。autoconf 将 `configure.in' 中的内容拷贝到 `configure',在此过程中它展开其中的宏,并把文本则作为代码直接拷贝。
让我们看一下与这个最小工程中用户提供的输入文件内容。下面是 `Makefile.am':

## Makefile.am -- Process this file with automake to produce Makefile.in
bin_PROGRAMS = foonly
foonly_SOURCES = main.c foo.c foo.h nly.c scanner.l parser.y
foonly_LDADD = @LEXLIB@
这个 `Makefile.am' 规定了我们想要构建名为 `foonly' 的程序,并且当 make install 运行时将它安装在 `bin' 目录中。用于构建的 `foonly' 的源文件是 C 源文件 `main.c'、`foo.c'、`nly.c' 和 `foo.h',以及 lex 程序 `scanner.l' 和 yacc 语法 `parser.y'。这也指出了 Automake 的一个优势:因为 lex 和 yacc 都从它们的输入文件中产生中间的 C 语言程序,所以 Automake 知道如何创建这些中间文件并将它们链接到最终的可执行文件。最后,如果 `configure' 需要,我们必须记得链接一个合适的 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' 为基础产生的(see section

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:(转载)Auto book 中文版(二)

下一篇:FreeBSD6.2安装Apache2.2不成功的两种原因