autoconf手册(2)

3.1.1. 标准‘configure.ac’布局

‘configure.ac’调用Autoconf宏的次序是无关紧要的,除了少数例外。每个 ‘configure.ac’必须在检查之前包含对AC_INIT的一次调用,并在最后包含对AC_OUTPUT的一次调用(参考4.5【输出】17页)。另外,某些宏依赖于其它宏首先被调用,因为它们通过检查某些变量先前被设置的值来确定如何做。这些宏在单独的描述中被标识出来(参考第5【现存测试】36页),如果不按顺序调用它们构建configure时,它们会给出警告。

为了鼓励一致性,这里是一个调用Autoconf宏的建议次序。通常而言,靠近这个列表底部的是那些依赖于在列表中出现在它们之前的项。例如,库函数可以被类型及库影响。

Autoconfrequirements

AC_INIT(package, version,bug-report-address)

information on the package

checksfor programs

checksfor libraries

checksfor header files

checksfor types

checksfor structures

checksfor compiler characteristics

checksfor library functions

checks for system services

AC_CONFIG_FILES([file...])

AC_OUTPUT

3.2. 使用autoscan来构建‘configure.ac’

程序autoscan可以帮助你为一个软件包构建或维护一个 ‘configure.ac’文件。autoscan检查以一个命令行参数给出的目录为根目录的目录树中的源文件;或当前目录,如果没指定的话。它在源文件中查找常见的移植问题,并创建一个‘configure.scan’文件,对于该软件包,它是一个初级的‘configure.ac’,检查可能存在的‘configure.ac’的完整性。

当使用autoscan来创建一个‘configure.ac’时,在把它重命名为‘configure.ac’之前,你应该手动检查‘configure.scan’;它可能需要某些调整。偶尔,autoscan会输出一个相对于其它宏次序上出错的宏,因此autoconf产生一个警告;你需要手动调整这样的宏。同样,如果你希望该软件包使用一个配置头文件,你必须增加一个对AC_CONFIG_HEADERS的调用(参考4.9【配置头文件30页。你可能还要在你的程序中改变或增加某些#if指示(directive),以使得它可以与Autoconf一起工作(关于一个可以在这方面有所帮助的程序的信息,参考3.3ifnames调用】10页)。

当使用autoscan来维护一个‘configure.ac’时,只需要考虑添加它的建议。文件‘autoscan.log’包含了为什么要求一个宏的详细信息。

Autoscan在一个软件包中找到特定的符号时,它使用几个数据文件(与Autoconf一起安装)来确定输出哪个宏。这些数据文件都具有相同的格式:每一行包含一个符号,一个或多个空格,及如果遇到这个符号输出的Autoconf宏。以‘#’开始的行是注释。

Autoscan接受以下选项:

--help

-h         打印该命令行选项的汇总信息并退出。

--version

-V        打印autoscan的版本号并退出。

--verbose

-v        检查的文件名,及在其中找到的可能感兴趣的符号名。这个输出可以很长。

--debug

-d        不要移走临时文件。

--include=dir

-I dir   dir附加到包含路径后。多个调用会累积。

--prepend-include=dir

-B dir   dir附加到包含路径前。多个调用会累积。

3.3. 使用 ifnames列出条件

Ifnames可以帮助你为一个软件包编写‘configure.ac’。它打印出该软件包在C预处理器条件中已经使用的标识符。如果一个软件包已经被设置为具有某些可移植性,那么ifnames可以帮你找出什么配置是需要检查的。它可以帮助填充由autoscan产生的‘configure.ac’中的空缺(参考3.2autoscan调用】9页)。

Ifnames扫描所有在命令行中列出的C源文件(或如果没有指定,扫描标准输入),并在标准输出上输出,在这些文件的#if#elif#ifdef,或#ifndef指示中出现的标识符,经过排序的列表。每一行打印一个标识符,后跟一个空格分隔的,出现该标识符的文件列表。

Ifnames接受以下选项:

--help

-h        打印该命令行选项的汇总信息并退出。

--version

-V      打印ifnames的版本号并退出。

3.4. 使用autoconf构建configure

为了从‘configure.ac’构建configure,不带参数运行autoconf程序。Autoconf连同使用AutoconfM4宏处理器一起,处理‘configure.ac’。如果你向autoconf给出一个参数,它从这个文件读入,而不是‘configure.ac’,并把配置脚本写到标准输出,而不是configure。如果你向autoconf给出参数‘-’,它从标准输入而不是‘configure.ac’读入,并把配置脚本写入标准输出。

Autoconf宏被定义在多个文件里。其中一些文件与Autoconf一起发布;autoconf首先读入它们。然后在包含Autoconf发布的宏文件的目录下,查找可选文件‘acsite.m4’,并在当前目录下查找可选文件‘aclocal.m4’。这些文件可以包括你自己站点(site)或软件包的Autoconf宏定义(细节参考第10【编写Autoconf宏】159页)。如果一个宏定义在autoconf 读入的多个文件里,后面读入的定义覆盖前面读入的。

Autoconf接受以下选项:

--help

-h        打印该命令行选项的汇总信息并退出。

--version

-V       打印autoconf的版本号并退出。

--verbose

-v        报告进度。

--debug

-d        不要移走临时文件。

--force

-f         重新构建‘configure’,即便它比其输入文件还有新。

--include=dir

-I  dir   dir附加到包含路径后。多个调用会累积。

--prepend-include=dir

-Bdir   dir附加到包含路径前。多个调用会累积。

--output=file

-ofile   把输出(脚本或示踪)保存入file。文件‘-’代表标准输出。

--warnings=category

-Wcategory

报告与category相关的警告(它们可以是以逗号分隔的一个列表)。关于category完整列表,参考10.3【报告消息】162页,宏AC_DIAGNOSE。特殊的值包括

‘all’          报告所有的警告

‘none’             不报告

‘error’             把警告作为错误处理

‘no-category’    禁止category类别中的警告

关于‘syntax’的警告默认是激活的,并且环境变量WARNINGS——一个逗号分隔的category列表,也是起作用的。传递‘-W category’实际行为就像你传递了‘--warnings syntax,$WARNINGS,category’。禁止这个默认行为及WARNINGS,然后启用关于陈旧结构的警告,使用‘-W none, obsolete’

因为autoconf在后台使用autom4te,它对错误显示一个回溯追踪,但对于警告没有;如果你希望这样,只需传递‘-W error’。参考8.2.1autom4te调用】118页,中的某些例子。

--trace=macro[:format]

-tmacro[:format]

不构建configure脚本,但依照format列出对macro的调用。可以使用多个‘--trace’参数来列出多个宏。对于单个宏,多个‘--trace’参数不会累积;相反,你应该使用所需长度的format

Format是一个正则字符串,如果需要,带有换行符,及几个特殊转义码。它默认为‘$f:$l:$n:$%’;关于format的细节,参考8.2.1autom4te调用】118页。

--initialization

-I      在默认情况下,‘--trace’不追踪Autoconf宏的初始化(通常是AC_DEFUN的定义)。这导致显著的加速,但可以禁止这个选项。

通常需要检查一个‘configure.ac’文件的内容,但你自己解析它是及其容易出错的。建议你依靠‘--trace’来扫描‘configure.ac’。例如,要找出被替换的变量列表,使用:

$ autoconf -t AC_SUBST

configure.ac:2:AC_SUBST:ECHO_C

configure.ac:2:AC_SUBST:ECHO_N

configure.ac:2:AC_SUBST:ECHO_T

More traces deleted

下面的例子突出了‘$@’‘$*’,及‘$%’之间的差别。

$ cat configure.ac

AC_DEFINE(This, is, [an

[example]])

$ autoconf -t ‘AC_DEFINE:@: $@

*: $*

%: $%’

@: [This],[is],[an

[example]]

*: This,is,an

[example]

%:This:is:an [example]

format给以你很多自由:

$autoconf -t ‘AC_SUBST:$$ac_subst{"$1"} = "$f:$l";’

$ac_subst{"ECHO_C"} ="configure.ac:2";

$ac_subst{"ECHO_N"} ="configure.ac:2";

$ac_subst{"ECHO_T"} ="configure.ac:2";

More traces deleted

可以使用长的分隔符来提高复杂结构的可读性,并简化其解析(例如当没有单个字符适用做一个分隔符):

$ autoconf -t ‘AM_MISSING_PROG:${|:::::|}*’

ACLOCAL|:::::|aclocal|:::::|$missing_dir

AUTOCONF|:::::|autoconf|:::::|$missing_dir

AUTOMAKE|:::::|automake|:::::|$missing_dir

More traces deleted

3.5. 使用autoreconf来更新configure脚本

安装GNU构建系统的不同组件可能是单调乏味的:为Gettext 运行autopoint,为在每个目录里的‘Makefile.in’等运行automake。这可能是需要的,或者因为某些工具,如automake在你的系统已经被更新了,或因为某些源代码,例如‘configure.ac’已经更新,或只是在一棵新代码树上安装GNU构建系统。

Autoreconf重复运行autoconfautoheaderaclocalautomakelibtoolize,及autopoint(当合适时)在指定的目录及其子目录中更新GNU构建系统(参考4.12【子目录】35页)。

在默认的情况下,仅重新构建那些比它们的源代码旧的文件。环境变量AUTOM4TEAUTOCONFAUTOHEADERAUTOMAKEACLOCALAUTOPOINTLIBTOOLIZEM4,及MAKE可能被用于改写这些工具的调用。

如果你安装某些工具的一个新版本,你可以通过‘--force’选项让autoreconf重新构建所有的文件。

至于当源文件改变时自动重构configure脚本的Make规则,参考4.8.5Automatic重新构建】29页。该方法正确地处理了配置头文件模板(configuration header template)的时间戳,但不传递‘--autoconf-dir=dir’‘--localdir=dir’

Gettext支持命令autopoint向一个源代码包加入翻译的基础架构。如果使用autopoint,你的‘configure.ac’应该调用AM_GNU_GETTEXTAM_GNU_GETTEXT_VERSIONgettext-version)。细节参考在《GNU gettext utilities》中的“Invoking the autopointProgram”一节。

Autoreconf接受以下选项:

--help

-h       打印该命令行选项的汇总信息并退出。

--version

-V      打印autoreconf的版本号并退出。

--verbose

-V    打印autoreconf检查的目录名,及它运行的命令。如果给出了两次或以上,传递‘--verbose’到支持它的下属工具。

--debug

-d      不要移走临时文件。

--force

-f     重构,即使‘configure’脚本及配置头文件比它们的输入文件(‘configure.ac’‘aclocal.m4’,如果有的话)还要新。

--install

-I     安装在软件包中缺失的辅助文件。在默认情况下,拷贝文件;这个行为可以被选项‘--symlink’改变。如果合适,这个选项触发对‘automake --add-missing’‘libtoolize’‘autopoint’等的调用。

--no-recursive

不要重构在配置子目录中的文件(参考4.12【子目录】35页,宏                AC_CONFIG_SUBDIRS).

--symlink

-s       当与‘--install’一起使用时,安装缺失辅助文件的符号链接,而不是拷贝它们。

--make

-m    当命令被配置时,通过运行‘./config.status --recheck&& ./config.status’来更新配置,然后运行‘make’

--include=dir

-Idir  dir附加到包含路径之后。多次调用可以累积。在内部传递给aclocalautoconfautoheader

--prepend-include=dir

-Bdir  dir附加到包含路径之前。多次调用可以累积。在内部传递给aclocalautoconfautoheader

--warnings=category

-Wcategory

报告关于category的警告(它可以是一个逗号分隔的列表)。

‘cross’         关于交叉编译的问题。

‘obsolete’    报告陈旧结构的使用。

‘portability’ 可能的问题

‘syntax’       有二义性的语法结构。

‘all’              报告所有的警告

‘none’          不报告

‘error’          把警告处理为错误

‘no-category’

                     禁止落在category内的警告

默认情况下关于‘syntax’的语法是激活的,并且环境变量WARNINGS——一个逗号分隔的categorie列表,也是生效的。传递‘-W category’实际上的行为就如同你传递了‘--warnings syntax, $WARNINGS, category’。要禁止缺省值及WARNINGS,然后激活关于陈旧结构的警告,使用‘-W none,obsolete’

如果你希望autoreconfaclocal传递没有在这里列出的标记,在你的‘Makefile.am’中设置ACLOCAL_AMFLAGS。因为Autoconf实现的局限,当前这些标记必须被设置在 ‘Makefile.am’中的一行上,不带任何‘\n’

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值