配置是如何进行的


每个GNU发布版本都应该还有一个名为configure的shell脚本。你需要把
你希望在那种机器和系统上编译程序作为参数告诉这个脚本。
脚本configure必须记录配置信息以便它们可以影响编译工作。
这样做的一种方式是把一个诸如`config.h'的标准名字和为选定的系统匹配的
正确配置文件连接起来。如果你使用了这种技术,发布版本中就应该包含名为
`config.h'的文件。这样做是为了保证用户在配置程序之前不能够创建它。
configure可以做的另一件事情是编辑Makefile。如果你这样做了,发布
版本中就不能包含名为`Makefile'的文件。用`Makefile.in'来代替
它,并且`Makefile.in'configure的编辑提供了输入。同样,
这样做是为了保证用户在配置程序之前不能创建它。
如果configure生成了`Makefile',那么`Makefile'
就应该包含一个名为`Makefile'的目标,这个目标将重新运行configure
以与获取上一次配置相同的配置信息。由configure读取的文件,应该作为
依赖性文件而在`Makefile'中被列出。
所有由configure脚本生成的文件在它们的第一行都应该包含一条注释
以说明它们是由configure自动生成的。这样做是为了确保用户不会试图手工
修改它们。
脚本configure应该写入一个名为`config.status'的文件,该文件
说明了在程序的最后一次配置中给出了那些配置选项。该文件应该是一个shell脚本,如果运行它,
将重新生成相同的配置。
脚本configure应该接受形式为`--srcdir=dirname'
的选项以指明在那个目录中可以找到源代码(如果源代码不在当前目录中)。这使得可以在
实际代码目录没有被修改的情况下,在分离的中创建程序成为可能。
如果用户没有给出`--srcdir',那么configure将在`.'
`..'中寻找源文件。如果它在上述地方之一发现源文件,它就应该在那里使用它们。
否则,它应该报告它没有找到源文件,并且以非零状态退出。
通常,支持`--srcdir'的简单方式是通过编辑被放到Makefile中的一个
VPATH的定义。可能有一些规则需要被显式地引用以指明源代码目录。为了达到这个
目的,configure可以把一个名为srcdir的变量添加到Makefile中,
该变量的值就是给定的目录。
脚本configure还应该提供一个可以指明程序是究竟为那种系统而创建的选项。
这个选项看起来应该象:
cpu-company-system

例如,一个Sun 3可能是`m68k-sun-sunos4.1'
脚本configure需要能够解释所有对机器的似是而非的描述方式。因此,
`sun3-sunos4.1'应该是有效的别名。`sun3-bsd4.2'也是如此,
因为SunOS是基于BSD的并且没有其它的BSD系统被用于Sun。对于许多程序来说,
因为Ultrix和BSD之间的区别很少被注意到,所以`vax-dec-ultrix'将是
`vax-dec-bsd'的一个别名。但少数程序可能需要区分它们。
这里有一个被称为`config.sub'的shell脚本,你可以把它作为一个子程序使用
以检查系统类型并且对别名进行规范化。
允许出现其它选项以指明关于机器的软件或者硬件的更多细节:

`--with-package'
package将被安装,所以把本包配置成与package一同工作。
package可能的取值包括`x'`gnu-as'(或者
`gas')、`gnu-ld'`gnu-libc'`gdb'

`--nfp'
目标机器没有浮点数处理器。

`--gas'
目标机器的汇编器是GAS,GNU的汇编器。该选项已经过时了;用`--with-gnu-as'来代替。

`--x'
目标机器已经安装了X Window系统。该选项已经过时了;用`--with-x' instead来代替。
所有的configure脚本都应该接受所有这些“细节”选项,而不论它们是否会对手头的特定
包产生影响。特别地,它们应该接受任何以`--with-'开头的选项。这样做是因为这使得用户
可以用同一组选项配置整个GNU源代码树。
作为编译的一部分的包可能支持交叉编译(cross-compliation)。在这种情况下,程序的主机和目标机器
可能是不同的。configure通常把指明的系统类型当作主机和目标机器,因此将创建与运行它
的机器类型相同的机器上运行的程序。
创建交叉编译器(cross-compiler)、交叉汇编器(cross-assembler)、或者你自己的程序,通过在运行
configure时给出选项`--host=hosttype'来完成。它在不影响
目标机器的情况下指明了主机名。hosttype的语法与前面所说的一样。
因为为互操作(cross-operation)配置整个操作系统是一件没有意义的事,对互操作来说没有意义的程序
就不必接受选项`--host'
有些程序自动地配置它们自己。如果你的程序被设置成这样,你的configure脚本只需要简单地
忽略它的大部分参数就行了。

0

收藏

cherishzzz

174篇文章,37W+人气,1粉丝

Ctrl+Enter 发布

发布

取消

配置是如何进行的 configure
配置是如何进行的 configure

扫一扫,领取大礼包

0

分享
配置是如何进行的 configure
cherishzzz
配置是如何进行的 configure