LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1148|回复: 0

Autobook的翻译草稿4

[复制链接]
发表于 2003-12-16 21:27:27 | 显示全部楼层 |阅读模式
//*************************************************************

译序

初学linux系统,感觉linux底下的编译,链接程序真的很麻烦。
因此想到了用Autoconf等工具。找到了Autobook这本好书。
也不知道有没有人翻译过这本书。
该书由女友Ellen翻译,在此对她表示感谢。
该书原文请参考 http://sources.redhat.com/autobook/...tobook_toc.html
如果翻译时有什么错误请
Ellengut2002@yahoo.com或者jasongut2002@126.com

转载请保留译序,3x.

//--------------------------------



3.如何运行配置和make
   使用Autoconf构建的软件包带有configure脚本。要在特定的系统中创建和安装这样一个软件包,用户必须运行该脚本以使目录树按顺序排列作好准备。实际的创建过程则是使用make程序得以完成的。
    configure脚本测试系统的特性。比如,它可以测试C库是否定义了用于time() C库函数的time_t数据类型。当创建程序时,configure脚本就可以向程序提供这些测试结果。
    本章节解释如何从用户的角度激活configure脚本。所谓用户是指那些只想拿你的软件包在他们自己的系统上进行编译的人。也就是因为Autoconf性能良好,通常使用简单的configure; make命令行就能在任何机器上创建软件包。本章将涉及如何激活configure,configure产生的文件,和在编译软件包时能获取的最有用的Makefile目标(即你想让make做的动作)。
3.1配置
   configure'脚本有大量的命令行选项。尽管一些基本的选项总是存在的,每个软件包的选项集是不同。运行configure的`'选项—help便知有哪些选项可供选择。尽管其中的许多选项是很深奥的,但是在配置有特殊安装要求的软件包时,知道这些选项的存在是很有价值的。每个选项将简单描述如下:

`--cache-file=file'
    configure'测试你的系统以确定可用的特性(或错误!)。测试的结果可储存在cache file中以便加快以后的configure'激活速度。在配置每个子树中都有configure脚本的复杂目录树时,成熟的cache file将大有帮助。

`--help'
   输出帮助信息。即使是有经验的configure用户有时也需要使用`--help' ,因为复杂的项目会在每个项目的配置中包括额外的选项。例如,GCC软件包中的configure允许你控制是否由GCC优先创建并使用GNU汇编编译器,而不是使用供应商的汇编编译器。

`--no-create'
    configure的主要功能之一是产生输出文件。这个选项防止configure产生这种输出文件。
尽管cache仍会被修改,但是你可以将该选项看作是一种dry run。

`--quiet'
`--silent'
当configure运行测试时,它会输出简洁的信息来告知用户脚本正在做什么。这项工作得以完成是因为configure能很慢。如果没有这种信息的输出,用户就无法得知脚本正在做的事。当然使用了这个选项,你也可能不知道它正在做的事。

`--version'
   打印产生 configure脚本的Autoconf版本。

`--prefix=prefix'
     --prefix是最常用的选项之一。如果产生的`Makefile's选择使用你通过该选项传递的参数时,就有可能对已安装的软件包中结构独立的部分进行完全地重新定位。例如,安装像Emacs这样的软件包时,下列命令行就将Emacs Lisp文件放在`/opt/gnu/share’
$ ./configure –prefix=/opt/gnu
需要强调的一点是:这种行为取决于使用该信息的产生文件。Automake为编写这些文件的开发者极大地简化了该过程。7. Introducing GNU Automake.中会介绍 Automake。

`--exec-prefix=eprefix'
    该选项与`--prefix'十分相似,只是它对已安装的依赖于体系结构文件进行定位。编译好的emacs'二进制文件就属于这种文件。如果这个选项没有给出,插入到产生文件中的缺省`exec-prefix'值就被设置为与`prefix'相同的值。
`--bindir=dir'
   指定已安装的二进制文件的地址。当有本质是二进制的其他产生文件存在时,这里的二进制文件是指被用户直接运行的程序。
`--sbindir=dir'
    指定已安装的高级用户二进制文件的地址。这些程序通常只被高级用户运行。
`--libexecdir=dir'
    指定已安装的可执行的支持文件地址。与二进制文件不同的是:这些文件从不被用户直接使用,但可以被上述的二进制文件执行。
`--datadir=dir'
指定普通数据文件的地址。
`--sysconfdir=dir'
   指定用在单一机器上的只读数据的地址。
`--sharedstatedir=dir'
   指定可修改数据的地址。这些数据可以被多个机器共享。
`--localstatedir=dir'
   指定可修改数据的地址。但是这些数据只是对单一机器特定。
`--libdir=dir'
   指定目标代码库的安装地址。
`--includedir=dir'
   指定C头文件的安装地址。用于其他语言(如C++)的头文件也可以被安装在这里。
`--oldincludedir=dir'
   指定不是用于GCC编译器的C头文件的安装地址。
`--infodir=dir'
指定Info 格式文档文件的安装地址。Info是GNU项目使用的文档格式。
`--mandir=dir'
    指定manual手册页的安装地址。
`--srcdir=dir'
    该选项并不影响安装。它告诉`configure源文件的位置。通常不需要指定该选项,因为configure脚本通常与源文件处于同一目录。
`--program-prefix=prefix'
   指定在安装程序时应被加到该程序名的前缀。例如, `在配置通常命名为`tar'的程序时,使用`--program-prefix=g'会使安装的程序被命名为gtar'。与其他的安装选项一样,该configure选项只在被Makefile.in''文件使用时才起作用。
`--program-suffix=suffix'
指定安装程序时应被加到程序名的后缀。
`--program-transform-name=program'
    这里的program是 sed脚本。当程序被安装时,它原有的名字将被`sed -e script'运行以产 生它被安装后的名字。
`--build=build'
   指定软件包将在何种系统上创建。如果没有具体指定,缺省与主机的配置名相同。
`--host=host'
   指定软件包将在何种系统上运行。如果没有具体指定,主机的三连符名称通过执行config.guess'来决定。
`--target=target'
      指定软件包目标系统的种类。该选项能在编译器、汇编编译器之类的环境中使用。如果没有具体指定,缺省与主机的配置名相同。

`--disable-feature'
    一些软件包可以选择为大型的选项(如使用Kerberos认证系统或实验的编译优化检查)提供编译时的配置能力。如果缺省提供这些特性而feature又是特性的指定名时,选项`--disable-feature'可以使这些特性失效。例如:  
$ ./configure --disable-gui

`--enable-feature[=arg]'
相反,一些软件包可以提供缺省失效的特性。当feature为特性的指定名时,使用`--enable-feature'可使这些特性生效。一个特性可以接受一个可选的参数。例如:
$ ./configure --enable-buffers=128
使用`--enable-feature=no可产生与使用上述的`--disable-feature'同样的效果'

`--with-package[=arg]'
在自由软件社区,有种健康的倾向:在可能的情况下重新使用已经存在的软件包和库。当源目录树被configure配置时,就有可能提供关于其他已安装的软件包的暗示。例如,BLT 小工具箱依靠 Tcl和 Tk语言。为了配置BLT,也许需要向configure提供Tcl和 Tk语言的安装地址:
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local

使用`--with-package=no'可产生与使用下面将阐述的--without-package'同样的效果。

`--without-package'
有时候,你也许不希望你的软件包与你系统上已经安装的软件包相互操作。例如,你也许不希望你的新编译器使用GNU ld。你可以通过使用下面的选项达到目的:
$ ./configure --without-gnu-ld
`--x-includes=dir'
这个选项实际上是`--with-package'的一个特例。当Autoconf最初被开发时,人们通常用configure'替代Imake来创建在X Window 系统上运行的程序。选项`--x-includes' 提供了一种方法来指导configure脚本到包含X11头文件的目录。

`--x-libraries=dir'
    同样地,选项--x-libraries提供了一种方法指导 configure到包含X11库的目录中。

不需要(通常也不值得)从源目录中运行configure。相反,一个由configure产生的编写得很好的`Makefile'能够创建源文件放置于另一个目录树的软件包。在其他目录树中创建源代码的派生文件的好处是相当明显的:不然派生文件(如目标文件)会使源目录树显得很混乱;而且无法在不同的系统中或用不同的配置来创建那些目标文件。因此,建议使用以下三个目录树:源目录树,build目录树和安装目录树。下面就是如何用这种方法创建GNU malloc软件包的一个例子:

          $ gtar zxf mmalloc-1.0.tar.gz  $ mkdir build && cd build  $ ../mmalloc-1.0/configure  creating cache ./config.cache  checking for gcc... gcc  checking whether the C compiler (gcc  ) works... yes  checking whether the C compiler (gcc  ) is a cross-compiler... no  checking whether we are using GNU C... yes  checking whether gcc accepts -g... yes  checking for a BSD compatible install... /usr/bin/install -c  checking host system type... i586-pc-linux-gnu  checking build system type... i586-pc-linux-gnu  checking for ar... ar  checking for ranlib... ranlib  checking how to run the C preprocessor... gcc -E  checking for unistd.h... yes  checking for getpagesize... yes  checking for working mmap... yes  checking for limits.h... yes  checking for stddef.h... yes  updating cache ../config.cache  creating ./config.status
既然已经配置build目录树,就可以继续创建软件包并将它安装在缺省地址`/usr/local中:
$ make all && make install
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表