Chinaunix首页 | 论坛 | 博客
  • 博客访问: 473709
  • 博文数量: 711
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 4200
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 14:18
文章分类

全部博文(711)

文章存档

2011年(1)

2008年(710)

我的朋友

分类:

2008-10-29 11:50:55


  获取规范的系统类型
  下列的宏使得configure脚本可以获得系统类型。它们运行shell脚本config.guess以确定用户在命令行中没有给出的、它们需要的关于主机、目标和创建类型的所有值。它们运行config.sub对用户给出的任何别名进行规范化。如果你使用这些宏,你必须把这两个shell脚本与你的源代码一同发布。关于 AC_CONFIG_AUX_DIR的信息,你可以通过该宏设置configure查找这些脚本的目录,请参见 创建输出文件。如果你没有使用这些宏中的任意一个,configure 就忽略任何传递给它的`--host'、`--target'和`--build'选项。
  宏: AC_CANONICAL_SYSTEM
  检测系统类型并把输出变量设置成规范的系统类型。关于该宏设置变量的细节,参见系统类型变量。
  宏: AC_CANONICAL_HOST
  只执行AC_CANONICAL_SYSTEM中关于主机类型功能的子集。对于不是编译工具链(compiler toolchain)一部分的程序,这就是所需要的全部功能。
  宏: AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd)
  如果缓存文件与当前主机、目标和创建系统类型不一致,就执行cmd或者打印一个缺省的错误消息。
  
  系统类型变量
  在调用了AC_CANONICAL_SYSTEM之后,下列输出变量包含了系统类型信息。在调用了AC_CANONICAL_HOST 之后,只设置了下列host变量。
  build,host,target
  
  规范系统名称;
  build_alias,host_alias,target_alias
  如果使用了config.guess,就是用户指定的名称或者规范名称;
  build_cpu,build_vendor,build_os
  host_cpu,host_vendor,host_os
  target_cpu,target_vendor,target_os
  为方便而提供的规范名称的独立部分。
  使用系统类型
  你将如何使用规范的系统类型?通常,你在`configure.in'中的一个或多个case语句中使用它来选择系统特定的C文件。而后把那些使用基于系统名的文件名的文件连接到诸如`host.h'或`target.c'的普通的文件上。case语句模型允许使用shell通配符对多种情况进行编组,就像下面的片断:
  
  case "$target" in
  i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;;
  i960-*-bout) obj_format=bout ;;
  esac
  宏: AC_LINK_FILES (source...,dest...)
  使得AC_OUTPUT把每个存在文件的source连接到对应连接名dest。如果可能,创建一个符号连接,否则就创建硬连接。dest和source应该是相对于顶层源代码目录或者创建目录的相对路径。可以多次调用本宏。
  
  例如,下列调用:
  AC_LINK_FILES(config/${machine}.h config/${obj_format}.h,host.h object.h)
  
  在当前目录中创建`host.h',它是一个到`srcdir/config/${machine}.h'的连接,并且创建`object.h',它是一个到`srcdir/config/${obj_format}.h'的连接。
  你还可以使用主机系统类型以寻找交叉编译工具。关于完成该任务的宏AC_CHECK_TOOL的信息,参见对普通程序和文件的检查。
  
  站点配置
  configure脚本支持几种本地配置决策方式。它们是用户指明外部软件的位置,包括或除去可选的特征,以修改过的名称安装的程序,以及为configure选项设置缺省值的手段。
  
  与外部软件一起工作
  有些软件包需要,或者可选地使用其它已经安装的软件包。用户可以把命令行选项传递给configure 以指明使用那个外部软件。选项采用下列形式之一:
  --with-package[=arg]
  --without-package
  例如,`--with-gnu-ld'的意思是使用GNU连接器而不是任何其它连接器。`--with-x'的意思是使用X Window系统。
  
  用户可以给出包名加`='加参数的命令行参数。`no'是关于包的缺省参数;它表示不使用包。既不是`yes'又不是`no'的参数将包含其它包的名字或者版本号,以便更精确地指定本程序可以与之协同工作的包。如果没有给出参数,`--without-package'的缺省参数为`yes'。 `--without-package'等价于`--with-package=no'。
  
  configure脚本并不对它们不支持的`--with-package'选项发出警告。本特征允许顶层目录中的configure脚本配置一个包含多个包的源代码树。在包支持不同的选项的时候,不会因为给出了只有一部分包支持的选项而导致不必要的错误消息。一个不幸的副作用是选项的拼写错误就不能被检查出来了。迄今为止还没有处理该问题的更好办法。
  
  对于每个可能使用的外部软件包,`configure.in'都应该调用AC_ARG_WITH以检测 configure的用户是否要求使用它。确定在缺省状态下,是使用还是不使用每个包,以及那个参数是合法的,是你的任务。
  宏: AC_ARG_WITH (package,help-string [,action-if-given [,action-if-not-given]])
  如果用户以选项`--with-package'或者`--without-package'调用 configure,就运行shell命令action-if-given。如果两个选项都没有给出,就运行shell命令 action-if-not-given。名字package给出了本程序应该与之协同工作的其它软件包。它应该仅仅由字母、数字和破折号(dashes)组成。
  
  shell命令action-if-given可以通过shell变量withval得到选项的参数,该变量的值实际上就是把 shell变量with_package的值中的所有`-'字符替换为`_'而得的。如果你愿意,可以使用变量with_package。
  
  参数help-string是对选项的描述,它看起来应该像:
  
  --with-readline?support fancy command line editing
  
  如果需要给出更多的细节,help-string可能多于一行。只要确保`configure --help'中的列的排列就可以了。不要在求助字符串中使用tab。你将需要用`['和`]'包围它以生成前导空格。
  
  宏: AC_WITH (package,action-if-given [,action-if-not-given])
  这是不支持求助字符串的AC_ARG_WITH的过时版本。
  
  选择包选项
  如果软件包含有可选的编译时(compile-time)特征,用户就可以在调用configure时使用命令行选项来指明是否编译它们。选项采用如下形式之一:
  
  --enable-feature[=arg]
  --disable-feature
  
  这些选项允许用户选择可选的选项进行创建和安装。`--enable-feature'选项永远不要使特征的行为变得不同或者导致一个特征代替另一个特征。它们只应该导致程序的一部分被创建而另一部分不创建。
  
  用户可以通过在特征名之后添加`='和参数来给出参数。给出参数`no'表示 不能使用该特征。一个带有参数的特征看起来就像`--enable-debug=stabs'。如果没有给出参数,它的缺省值就是`yes'。`--disable-feature'等价于 `--enable-feature=no'。
  
  configure脚本并不对它们所不支持的`--enable-feature'选项发出警告。本特征允许顶层目录中的configure脚本配置一个包含多个包的源代码树。在包支持不同的选项的时候,不会因为给出了只有一部分包支持的选项而导致不必要的错误消息。一个不幸的副作用是选项的拼写错误就不能被检查出来了。迄今为止还没有处理该问题的更好办法。
  
  对于每个可选的特征,`configure.in'都应该调用AC_ARG_ENABLE以检测configure 的用户是否要求把该特征包含进来。确定在缺省情况下,每个特征是否被包含进来,以及那些选项是合法的,是你的任务。
  宏: AC_ARG_ENABLE (feature,help-string [,action-if-given [,action-if-not-given]])
  如果用户以选项`--enable-feature'或者`--disable-feature'调用 configure,就运行shell命令action-if-given。如果两个选项都没有给出,就运行shell命令 action-if-not-given。名称feature表示可选的用户级功能。它应该仅仅由字母、数字和破折号(dashes)组成。
  
  shell命令可以通过访问shell变量enableval来得到选项的参数,该变量的值实际上就是把shell变量 enable_feature的值中所有的`-'字符替换成`_'而得到的。如果你愿意,可以使用变量enable_feature。help-string参数类似于 AC_ARG_WITH中相应的参数(参见与外部软件一起工作)。
  
  宏: AC_ENABLE (feature,action-if-given [,action-if-not-given])
  这是不支持求助字符串的AC_ARG_ENABLE的过时版本。
  
  配置站点细节
  有些软件包需要复杂的与站点相关(site-specific)的信息。例如用于某种服务、公司名称和email联系地址的主名(host names)。因为有些配置脚本是通过Metaconfig方式交互地询问这些信息生成的,人们有时对于按非交互方式,由Autoconf生成配置脚本如何获取这些信息感到困惑。
  
  这些站点配置信息应该被储存在一个仅仅由用户,而不是程序,编辑的文件中。文件的位置既可以基于 prefix变量,也可以是一个标准的位置,比如说用户的home目录。它甚至可能通过一个环境变量给出。程序应该在运行时,而不是在编译时,检查那个文件。运行时配置对于用户来说更为方便,并且使得配置过程比在配置时获取这些信息要简单。关于存放数据文件的地点的详细信息,参见GNU编码标准中的 `为安装目录而提供的变量'。
  
  在安装的时候改变程序的名称
  Autoconf支持在安装程序的时候修改程序的名称。为了使用这些变换,`configure.in'必须调用宏 AC_ARG_PROGRAM。
  宏: AC_ARG_PROGRAM
  把对被安装的程序的名称进行替换的sed命令序列存入输出变量program_transform_name中。
  
  如果把下列任意选项传递给了configure,程序名就据此进行变换。否则,如果已经调用了AC_CANONICAL_SYSTEM并且`--target'的值给出了与主机类型(用`--host'给出的,或者是在config.sub中设置的缺省值)不同的类型,就把末尾附加了破折号的目标类型作为前缀。否则,就不进行程序名变换。
  转换选项
【责编:admin】

--------------------next---------------------

阅读(365) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~