配置是如何进行的

每个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 发布

发布

取消


f92360e227f9d91cdff7ea95120630ef.png
left-qr.jpg

扫一扫,领取大礼包

0

分享



qr-url?url=https%3A%2F%2Fblog.51cto.com%2Fbaigoogledu%2F154241

cherishzzz

noavatar_middle.gif