对话 UNIX,第 12 部分: 自己动手完成项目( 二 )


软件包中有价值的内容
作为一个说明性的和典型的示例,让我们配置、构建并安装 SQLite——一个实现结构化查询语言(Structured Query Language,SQL)数据库引擎的小型的库 。SQLite 不需要进行任何配置即可使用,并且可以完整地嵌入到任何应用程序中,而数据库则包含在单个文件中 。许多编程语言都可以调用 SQLite 以实现数据的持久化 。SQLite 还包括一种用于管理 SQLite 数据库的、名为 sqlite3 的命令行实用工具 。
要开始学习这部分内容,首先下载 SQLite(请参见参考资料) 。选择最新的源代码包,并将其下载到您的计算机中 。(在撰写本文时,SQLite 的最新版本是版本 3.3.17,于 2007 年4 月 25 日发布 。)这个示例使用了 http://www.sqlite.org/sqlite-3.3.17.tar.gz 中存储的文件 。
在您获得了该文件之后,请对其进行解压缩 。.tar.gz 扩展反映了该存档文件是如何构造的 。在这个示例中,它是一个压缩了的 tar 存档文件 。后面的扩展 .gz,表示 gzip(压缩);前面的扩展 .tar,表示 tar(一种存档格式) 。要提取该存档文件的内容,只需要对其进行反向处理即可,也就是首先解压缩,然后打开该存档文件:
$ gunzip sqlite-3.3.17.tar.gz
$ tar xvf sqlite-3.3.17.tar
这两个命令在一个名为 sqlite-3.3.17 的新目录中创建了原始源代码的一个副本 。顺便说明一下,.tar.gz 文件格式是非常常见的(称为 tarball),并且您可以使用 tar 命令直接解压缩 tarball 文件:
$ tar xzvf sqlite-3.3.17.tar.gz
这一个命令和前面的两个命令是等价的 。
接下来,将目录更改为 sqlite-3.3.17,并使用 ls,以列出其中的内容 。您应该看到与清单 1 所示类似的清单:
清单 1. SQLite 包的清单
$ ls
Makefile.in contrib publish.sh
Makefile.Linux-gcc doc spec.template
README ext sqlite.pc.in
VERSION install-sh sqlite3.1
aclocal.m4 ltmain.shsqlite3.pc.in
addopcodes.awk main.mk src
art mkdll.shtclinstaller.tcl
config.guessmkopcodec.awktest
config.sub mkopcodeh.awktool
configuremkso.sh www
configure.acnotes
其中的源代码和 SQLite 补充文件经过了很好组织,并且模拟了大部分的软件项目分发源代码的方式:
【对话 UNIX,第 12 部分: 自己动手完成项目】README 文件对该项目进行了描述,并且通常用于说明如何构建该软件 。(README 文件还详细地介绍了使用条款,或者许可证、适用情况 。许多项目的许可证代码都符合 GNU 公共许可版本 2 中的条款,即所谓的“copyleft许可证 。在许可证与您打算如何使用该软件之间可能存在一定的冲突,如果您对此有任何疑问,最好请教一下合适的法律顾问 。)
src 目录中包含了相关的代码 。
test 目录中包含了一组测试,以验证该软件的操作是否正确 。在开始构建或者进行了任何修改之后,请运行这些测试,这样可以增加对该软件的信心 。
contrib 目录中包含核心 SQLite 开发团队所没有提供的附加软件 。对于像 SQLite 这样的库,contrib 中可能包含一些常用语言(如 C、Perl、PHP 和 Python)的编程接口 。它可能还包括图形用户界面(GUI)包装,以及更多的内容 。
在其他文件中,Makefile.in、configure、configure.ac 和 aclocal.m4 用于生成在您的 Unix 版本中编译 SQLite 软件的脚本和规则 。如果这个软件足够简单,那么要编译其代码,可能只需要一条简单的编译命令即可 。但是,因为存在如此之多的 UNIX 变种(Mac OS X、Solaris、Linux、IBM?AIX?和 HP/UX 等等),所以必须对宿主计算机进行分析,以确定它的功能及其实现 。例如,邮件阅读应用程序可能会尝试确定本地系统是如何存储邮箱的,并包含对该格式的支持 。

推荐阅读