王朝网络
分享
 
 
 

autoconf手册(六)

王朝other·作者佚名  2008-05-19
宽屏版  字体: |||超大  

AC_DEFINE(EQUATION, "$a $b")

宏: AC_DEFINE_UNQUOTED (variable [, value [, description]])

类似于AC_DEFINE,但还要对variable和value进行三种shell替换(每种替换只进行一次):变量扩展(`$'),命令替换(``'),以及反斜线传义符(`\')。值中的单引号和双引号没有特殊的意义。在variable或者value是一个shell变量的时候用本宏代替AC_DEFINE。例如:

AC_DEFINE_UNQUOTED(config_machfile, "${machfile}")

AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)

AC_DEFINE_UNQUOTED(${ac_tr_hdr})

由于Bourne shell在语法上的特异性,不要用分号来分隔对AC_DEFINE或者AC_DEFINE_UNQUOTED的调用和其它的宏调用或者shell代码;这将在最终的configure脚本中导致语法错误。你既可以使用空格,也可以使用换行。就是这样:

AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf")

或者:

AC_CHECK_HEADER(elf.h,

?AC_DEFINE(SVR4)

?LIBS="$LIBS -lelf")

而不是:

AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4); LIBS="$LIBS -lelf")

设置输出变量

记录测试结果的一种方式是设置输出变量,该变量是shell变量,它的值将被替换到configure输出的文件中。下面的两个宏创建新的输出变量。关于总是可用的输出变量的列表,参见预定义输出变量。

宏: AC_SUBST (variable)

从一个shell变量创建一个输出变量。让AC_OUTPUT把变量variable替换到输出文件中(通常是一个或多个 `Makefile')。这意味着AC_OUTPUT将把输入文件中的`@variable@'实例替换成调用AC_OUTPUT时shell变量variable的值。variable的值不能包含新行。

宏: AC_SUBST_FILE (variable)

另一种从shell变量创建输出变量的方式。让AC_OUTPUT把由shell变量variable给出的文件名的文件的内容(不进行替换)插入到输出文件中。这意味着AC_OUTPUT将在输出文件中(比如`Makefile.in')把输入文件中的`@variable@'实例替换为调用AC_OUTPUT时shell变量variable的值指明的文件的内容。如果没有文件可以插入,就把变量设置成`/dev/null'。

本宏用于把包含特殊依赖性或者为特殊主机或目标机准备的其它make指令的`Makefile'片断插入 `Makefile'。例如,`configure.in'可以包含:

AC_SUBST_FILE(host_frag)dnl

host_frag=$srcdir/conf/sun4.mh

那么`Makefile.in'就应该包含:

@host_frag@

缓存结果

为了避免在各种configure脚本中重复地对相同的特征进行检查(或者重复地运行同一个脚本), configure把它的检查的许多结果储存在缓存文件。如果在configure脚本运行时,它找到了缓存文件,它就从中读取从前运行的结果并且不再重新运行这些检查。因此,configure将比每次都运行所有的检查要快得多。

宏: AC_CACHE_VAL (cache-id, commands-to-set-it)

确认由cache-id指定的检查的结果是可用的。如果检查的结果在读入的缓存文件中,并且configure 没有用`--quiet'或者`--silent'调用,就打印一条消息以说明该结果已经被缓存了;否则,就运行 shell命令commands-to-set-it。这些命令不应具有副作用,但设置变量cache-id除外。它们尤其不应该调用 AC_DEFINE;紧随与对AC_CACHE_VAL的调用之后的代码应该根据缓存的值调用AC_DEFINE 作这件事。此外,它们不应该打印任何消息,比如说使用AC_MSG_CHECKING;应该在调用AC_CACHE_VAL 之前打印,以便不论测试的结果是从缓存中检索而得到的,还是通过运行shell命令而确定的,都会打印消息。如果是运行 shell命令以确定值,该值将在configure创建它的输出文件之前被储存到缓存文件中。关于如何选择 cache-id变量的名称,参见缓存变量名。

宏: AC_CACHE_CHECK (message, cache-id, commands)

这是一个更详尽地处理了打印消息的AC_CACHE_VAL版本。本宏为这些宏的最常见的应用提供了便捷的缩写。它为message调用AC_MSG_CHECKING,而后以cache-id和commands为参数调用AC_CACHE_VAL,最后以cache-id为参数调用AC_MSG_RESULT。

宏: AC_CACHE_LOAD

从已经存在的缓存文件中装入值,如果找不到缓存文件,就创建一个新的缓存文件。本宏由AC_INIT自动调用。

宏: AC_CACHE_SAVE

把所有缓存的值刷新到缓存文件中。本宏由AC_OUTPUT自动调用,但在configure.in的关键点调用 AC_CACHE_SAVE是十分有用的。假如配置脚本中途失败(abort)了,这些关键点仍然可以缓存一部分结果。

缓存变量名

缓存变量的名字应该符合如下格式:

package-prefix_cv_value-type_specific-value[_additional-options]

例如,`ac_cv_header_stat_broken'或者`ac_cv_prog_gcc_traditional'。变量名的各个部分为:

package-prefix

你的包或者组织的缩写;除了为了方便而使用小写字母以外,与你使用的作为本地Autoconf宏的开头的前缀一样。对于由发布的Autoconf宏使用的缓存值,它是`ac'。

_cv_

表明本shell变量是一个缓存值。

value-type

关于缓存值类别的惯例,以生成一个合理的命名系统。在Autoconf中使用的值在宏名中列出。

specific-value

指明本测试应用于缓存值类的那个成员。例如,那个函数(`alloca')、程序(`gcc')或者输出变量(`INSTALL')。

additional-options

给出应用本测试的特定成员的任何特殊行为。例如,`broken'或者`set'。如果没有用,名字的这个部分可能被忽略掉。

赋予缓存变量的值不能含有新行。通常,它们的是将是布尔(`yes'或`no')或者文件名或者函数名;所以,这并不是一个重要的限制。

缓存文件

缓存文件是一个缓存了在一个系统上进行配置测试的结果,以便在配置脚本和配置的运行之间共享的shell脚本。它对于其他系统来说是没有用的。如果它的内容因为某些原因而变得无效了,用户可以删除或者编辑它。

在缺省情况下,configure把`./config.cache'作为缓存文件,如果它还不存在,就创建它。 configure接受选项`--cache-file=file'以使用不同的缓存文件;这就是configure在调用子目录中的configure脚本时所作的工作。关于使用宏AC_CONFIG_SUBDIRS在子目录中进行配置的信息,参见 在子目录中配置其它包。

给出`--cache-file=/dev/null'会关闭缓存,这是为调试configure提供的。只有在调用`config.status'时给出选项`--recheck',这将导致它重新运行configure,它才会注意到缓存文件。如果你预计需要一个长的调试时期,你还可以通过在`configure.in'的开头重新定义缓存宏而关闭对configure脚本的装入和储存:

define([AC_CACHE_LOAD], )dnl

define([AC_CACHE_SAVE], )dnl

AC_INIT(whatever)

... rest of configure.in ...

试图为特定的系统类型发布缓存文件是错误的。这里存在太多的导致错误的空间,并带来太多的用于维护它们的管理开销。对于任何不能被自动猜测出来的特征,应使用规范系统类型和连接文件的方法(参见手工配置)。

在特定系统中,每当有人运行configure脚本时,缓存文件将逐渐积累起来;缓存文件在一开始并不存在。运行configure会把新的缓存结果与现存的缓存文件结合起来。为了让它透明地工作,只要每次都使用相同的C编译器,站点初始化(site initialization)脚本可以指定一个站点范围(site-wide)的缓存文件以代替缺省的缓存文件。(参见设定本地缺省值)。

如果你的配置脚本,或者configure.in中的宏调用,偶尔导致配置过程的失败,在几个关键点进行缓存可能是有用的。在有希望修正导致上次运行的错误的时候,这样做将减少重新运行configure脚本的时间。

... AC_INIT, etc. ...

dnl checks for programs

AC_PROG_CC

AC_PROG_GCC_TRADITIONAL

... more program checks ...

AC_CACHE_SAVE

dnl checks for libraries

AC_CHECK_LIB(nsl, gethostbyname)

AC_CHECK_LIB(socket, connect)

... more lib checks ...

AC_CACHE_SAVE

dnl Might abort...

AM_PATH_GTK(1.0.2, , exit 1)

AM_PATH_GTKMM(0.9.5, , exit 1)

打印消息

configure脚本需要为运行它们的用户提供几种信息。下列的宏为每种信息以适当的方式打印消息。所有宏的参数都应该由shell双引号括起来,以便shell可以对它们进行变量替换和反引号替换。你可以把消息用 m4引用字符括起来以打印包含括号的消息:

AC_MSG_RESULT([never mind, I found the BASIC compiler])

这些宏都是对shell命令echo的封装。configure应该很少需要直接运行echo来为用户打印消息。使用这些宏使得修改每种消息如何打印及何时打印变得容易了;这些修改只需要对宏的定义进行就行了,而所有的调用都将自动地改变。

宏: AC_MSG_CHECKING (feature-description)

告知用户configure正在检查特定的特征。本宏打印一条以`checking '开头,以`...' 结尾,而且不带新行的消息。它必须跟随一条对AC_MSG_RESULT的调用以打印检查的结果和新行。 feature-description应该是类似于 `whether the Fortran compiler accepts C++ comments'或者`for c89'的东西。

如果运行configure给出了选项`--quiet'或者选项`--silent',

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有