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


 --enable-threadsafe Support threadsafe operation
 --enable-cross-thread-connections
 Allow connection sharing across threads
 --enable-threads-override-locks
 Threads can override each others locks
 --enable-releasemodeSupport libtool link to release mode
 --enable-tempstore Use an in-ram database for temporary tables
 (never,no,yes,always)
 --disable-tcldo not build TCL extension
 --disable-readline disable readline support [default=detect]
 --enable-debug enable debugging & verbose explain
返回到 ./configure --help,最顶部的输出显示了可执行文件的缺省安装目录是 /usr/local/bin,库文件的缺省安装目录是 /usr/local/lib,等等 。许多系统使用一个替代的层次结构来存储非核心软件 。
例如,许多系统管理员选择使用 /opt 而不是 /usr/local 存储本地添加的或者在本地进行了修改的软件 。如果您希望将 SQLite 安装到与缺省目录不同的其他目录中,可以使用 --prefix= 选项指定该目录 。一种可行的方法(也是一种常见的方法,如果只有您一个人使用这个软件包,或者如果您没有 root 访问权限以便在全局的范围内安装该软件)是将该软件安装到您的 home 目录中的层次结构中:$ ./configure --prefix=$HOME/sw
使用这个命令,构建过程的安装部分将在 $HOME/sw 中(比如 $HOME/sw/bin、$HOME/sw/lib、$HOME/sw/etc、$HOME/sw/man,以及其他所需的目录中)重新创建该软件的层次结构 。为了简单起见,这个示例在缺省目标处安装其代码 。
编译代码
./configure 的结果是一个与您的 Unix 版本兼容的 Makefile 。名为 make 的开发实用工具将使用这个 Makefile,以执行编译所需的步骤,并将代码链接到一个可执行文件 。您可以打开这个 Makefile 对其进行检查,但不要对它进行编辑,因为如果您再次运行 ./configure,它将列出您所做的任何修改 。
这个 Makefile 中包含需要编译的源文件的列表,并且它还包括启用或者禁用并选择 SQLite 包中的某些代码片段的常数 。例如,如果 configure 工具检测到了系统中合适的芯片,那么它可能会启用 64位处理器特定的代码 。这个 Makefile 还说明了源文件之间的依赖关系,因此在一个非常重要的头文件 (.h) 中进行的一项更改,可能会导致重新编译所有的 C 源代码 。
您的下一个步骤是运行 make,以构建该软件(请参见清单 5):
清单 5. 运行 make
$ make
sed -e s/--VERS--/3.3.17/ ./src/sqlite.h.in |
 sed -e s/--VERSION-NUMBER--/3003017/ >sqlite3.h
gcc -g -O2 -o lemon ./tool/lemon.c
cp ./tool/lempar.c .
cp ./src/parse.y .
./lemon parse.y
mv parse.h parse.h.temp
awk -f ./addopcodes.awk parse.h.temp >parse.h
cat parse.h ./src/vdbe.c | awk -f ./mkopcodeh.awk >opcodes.h
./libtool --mode=compile --tag=CC gcc -g -O2 -I. -I./src
 -DNDEBUG -I/System/Lib rary/Frameworks/Tcl.framework/Versions/8.4/Headers
 -DTHREADSAFE=0 -DSQLITE_THREA D_OVERRIDE_LOCK=-1
 -DSQLITE_OMIT_LOAD_EXTENSION=1 -c ./src/alter.c
mkdir .libs
gcc -g -O2 -I. -I./src -DNDEBUG
 -I/System/Library/Frameworks/Tcl.framework/Vers ions/8.4/Headers
 -DTHREADSAFE=0 -DSQLITE_THREAD_OVERRIDE_LOCK=-1
 -DSQLITE_OMIT_L OAD_EXTENSION=1 -c ./src/alter.c -fno-common
 -DPIC -o .libs/alter.o
...
ranlib .libs/libtclsqlite3.a
creating libtclsqlite3.la
注意: 在上面的输出中,添加了一些空白行,以便更好地突出显示 make 发起的每个步骤 。
make 实用工具检查文件(头文件、源代码、数据文件和目标文件)的修改日期,并编译合适的 C 源文件 。最初,make 将重新编译所有内容,因为不存在任何目标文件或者编译目标 。正如您可以看到的,用于编译目标的规则还包括一些中间步骤,其中使用了一些相关的工具,如 sed 和 awk,以产生在后续的步骤中将要使用的头文件 。

推荐阅读