Autoconf 详解.docx
- 文档编号:26146356
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:10
- 大小:19.20KB
Autoconf 详解.docx
《Autoconf 详解.docx》由会员分享,可在线阅读,更多相关《Autoconf 详解.docx(10页珍藏版)》请在冰豆网上搜索。
Autoconf详解
Autoconf详解
Autoconf
CreatingAutomaticConfigurationScripts
Edition2.13,forAutoconfversion2.13
December1998
byDavidMacKenzieandBenElliston
?
?
?
目录
介绍
创建configure脚本
编写`configure.in'
用autoscan创建`configure.in'
用ifnames列举条件
用autoconf创建configure
用autoreconf更新configure脚本
初始化和输出文件
寻找configure的输入文件
创建输出文件
Makefile中的替换
预定义输出变量
创建目录
自动地重新创建
配置头文件
配置头文件模板
用autoheader创建`config.h.in'
在子目录中配置其它包
缺省的前缀
configure中的版本号
现有的测试
对程序的选择
对特定程序的检查
对普通程序和文件的检查
库文件
库函数
对特定函数的检查
对普通函数的检查
头文件
对特定头文件的检查
对普通头文件的检查
结构
类型定义
对特定类型定义的检查
对普通类型定义的检查
C编译器的特征
Fortran77编译器的特征
系统服务
UNIX变种
编写测试
检验声明
检验语法
检验库
检查运行时的特征
运行测试程序
测试程序指南
测试函数
可移植的Shell编程
测试值和文件
多种情况
对语言的选择
测试的结果
定义C预处理器符号
设定输出变量
缓存结果
缓存变量名
缓存文件
打印消息
编写宏
宏定义
宏名
引用
宏之间的依赖性
首要的宏
建议的顺序
过时的宏手工配置
指定系统的类型
获取规范的系统类型
系统类型变量
使用系统类型
站点配置
与外部软件一起工作
选择包选项
配置站点细节
在安装的时候改变程序的名称
转换选项
转换的例子
转换的规则
设定站点缺省值
运行configure脚本
重新创建一个配置
关于Autoconf的问题
发布configure脚本
为什么需要使用GNUm4?
我如何解开死结?
为什么不使用Imake?
从版本1中升级
改变了的文件名
改变了的Makefile
改变了的宏
用autoupdate更新configure
改变了的结果
改变了的宏的编写
Autoconf的历史
起源(Genesis)
出发(Exodus)
上路(Leviticus)
发展(Numbers)
现状(Deuteronomy)
陈旧的宏名
环境变量索引
输出变量索引
预处理器符号索引
宏索引
?
?
Permissionisgrantedtomakeanddistributeverbatimcopiesofthismanualprovidedthecopyrightnoticeandthispermissionnoticearepreservedonallcopies.
Permissionisgrantedtocopyanddistributemodifiedversionsofthismanualundertheconditionsforverbatimcopying,providedthattheentireresultingderivedworkisdistributedunderthetermsofapermissionnoticeidenticaltothisone.
Permissionisgrantedtocopyanddistributetranslationsofthismanualintoanotherlanguage,undertheaboveconditionsformodifiedversions,exceptthatthispermissionnoticemaybestatedinatranslationapprovedbytheFreeSoftwareFoundation.
只要版权声明和本许可声明保留在所有副本中,您就被授权制作和发行本手册的原文副本。
只要整个最终派生工作按照与本手册相同的许可声明发行,您就被授权按照与发行原文相同的条件复制和发行本手册的修改版本。
除了本许可声明应该使用由基金会批准的译文之外,您被授权按照与上述修改版本相同的条件复制和发行本手册的其它语言的译文。
本文档由王立翻译。
1999.12.16
译者在此声明:
不对任何由译文错误或者对译文的误解承担任何责任。
介绍
Aphysicist,anengineer,andacomputerscientistwerediscussingthenatureofGod.SurelyaPhysicist,saidthephysicist,becauseearlyintheCreation,GodmadeLight;andyouknow,Maxwell'sequations,thedualnatureofelectro-magneticwaves,therelativistconsequences...AnEngineer!
saidtheengineer,becausebeforemakingLight,GodsplittheChaosintoLandandWater;ittakesahellofanengineertohandlethatbigamountofmud,andorderlyseparationofsolidsfromliquids...Thecomputerscientistshouted:
AndtheChaos,wheredoyouthinkitwascomingfrom,hmm?
---Anonymous
Autoconf是一个用于生成可以自动地配置软件源代码包以适应多种Unix类系统的shell脚本的工具。
由Autoconf生成的配置脚本在运行的时候与Autoconf是无关的,就是说配置脚本的用户并不需要拥有Autoconf。
由Autoconf生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要通过给出参数以确定系统的类型。
相反,它们对软件包可能需要的各种特征进行独立的测试。
(在每个测试之前,它们打印一个单行的消息以说明它们正在进行的检测,以使得用户不会因为等待脚本执行完毕而焦躁。
)因此,它们在混合系统或者从各种常见Unix变种定制而成的系统中工作的很好。
没有必要维护文件以储存由各个Unix变种、各个发行版本所支持的特征的列表。
对于每个使用了Autoconf的软件包,Autoconf从一个列举了该软件包需要的,或者可以使用的系统特征的列表的模板文件中生成配置脚本。
在shell代码识别并响应了一个被列出的系统特征之后,Autoconf允许多个可能使用(或者需要)该特征的软件包共享该特征。
如果后来因为某些原因需要调整shell代码,就只要在一个地方进行修改;所有的配置脚本都将被自动地重新生成以使用更新了的代码。
Metaconfig包在目的上与Autoconf很相似,但它生成的脚本需要用户的手工干预,在配置一个大的源代码树的时候这是十分不方便的。
不象Metaconfig脚本,如果在编写脚本时小心谨慎,Autoconf可以支持交叉编译(cross-compiling)。
Autoconf目前还不能完成几项使软件包可移植的工作。
其中包括为所有标准的目标自动创建`Makefile'文件,包括在缺少标准库函数和头文件的系统上提供替代品。
目前正在为在将来添加这些特征而工作。
对于在C程序中的#ifdef中使用的宏的名字,Autoconf施加了一些限制(参见预处理器符号索引)。
Autoconf需要GNUm4以便于生成脚本。
它使用了某些UNIX版本的m4所不支持的特征。
它还会超出包括GNUm41.0在内的某些m4版本的内部限制。
你必须使用GNUm4的1.1版或者更新的版本。
使用1.3版或者更新的版本将比1.1或1.2版快许多。
关于从版本1中升级的详情,参见从版本1中升级。
关于Autoconf的开发历史,参见Autoconf的历史。
对与Autoconf有关的常见问题的回答,参见关于Autoconf的问题。
把关于Autoconf的建议和bug报告发送到bug-gnu-utils@prep.ai.mit.edu。
请把你通过运行`autoconf--version'而获得的Autoconf的版本号包括在内。
创建configure脚本
由Autoconf生成的配置脚本通常被称为configure。
在运行的时候,configure创建一些文件,在这些文件中以适当的值替换配置参数。
由configure创建的文件有:
一个或者多个`Makefile'文件,在包的每个子目录中都有一个(参见Makefile中的替换);
有时创建一个C头文件,它的名字可以被配置,该头文件包含一些#define命令(参见配置头文件);
一个名为`config.status'的shell脚本,在运行时,它将重新创建上述文件。
(参见重新创建一个配置);
一个名为`config.cache'的shell脚本,它储存了许多测试的运行结果(参见缓存文件);
一个名为`config.log'的文件,它包含了由编译器生成的许多消息,以便于在configure出现错误时进行调试。
为了使用Autoconf创建一个configure脚本,你需要编写一个Autoconf的输入文件`configure.in'并且对它运行autoconf。
如果你自行编写了特征测试以补充Autoconf所提供的测试,你可能还要编写一个名为`aclocal.m4'的文件和一个名为`acsite.m4'的文件。
如果你使用了包含#define指令的C头文件,你可能还要编写`acconfig.h',并且你需要与软件包一同发布由Autoconf生成的文件`config.h.in'。
下面是一个说明了在配置中使用的文件是如何生成的图。
运行的程序都标以后缀`*'。
可能出现的文件被方括号(`[]')括起来。
autoconf和autoheader还读取安装了的Autoconf宏文件(通过读取`autoconf.m4')。
在准备发布软件包的过程中使用的文件:
你的源文件-->[autoscan*]-->[configure.scan]-->configure.inconfigure.in--..------>autoconf*----->configure+---+[aclocal.m4]--+`---.[acsite.m4]---'|+-->[autoheader*]->[config.h.in][acconfig.h]----.|+-----'[config.h.top]--+[config.h.bot]--'Makefile.in------------------------------->Makefile.in
在配置软件包的过程中使用的文件:
.------------->config.cacheconfigure*------------+------------->config.log|[config.h.in]-.v.->[config.h]-.+-->config.status*-++-->make*Makefile.in---'`->Makefile---'
编写`configure.in'
为了为软件包创建configure脚本,需要编写一个名为`configure.in'的文件,该文件包含了对那些你的软件包需要或者可以使用的系统特征进行测试的Autoconf宏的调用。
现有的Autoconf宏可以检测许多特征;对于它们的描述可以参见现有的测试。
对于大部分其他特征,你可以使用Autconf模板宏以创建定制的测试;关于它们的详情,参见编写测试。
对于特别古怪或者特殊的特征,`configure.in'可能需要包含一些手工编写的shell命令。
程序autoscan可以为你编写`configure.in'开个好头(详情请参见用autoscan创建`configure.in')。
除了少数特殊情况之外,在`configure.in'中调用Autoconf宏的顺序并不重要。
在每个`configure.in'中,必须在进行任何测试之间包含一个对AC_INIT的调用,并且在结尾处包含一个对AC_OUTPUT的调用(参见创建输出文件)。
此外,有些宏要求其他的宏在它们之前被调用,这是因为它们通过检查某些变量在前面设定的值以决定作些什么。
这些宏在独立的说明中给出(参见现有的测试),而且如果没有按照顺序调用宏,在生成configure时会向你发出警告。
为了提高一致性,下面是调用Autoconf宏的推荐顺序。
通常,在本列表中靠后的项目依赖于表中靠前的项目。
例如,库函数可能受到typedefs和库的影响。
AC_INIT(file)checksforprogramschecksforlibrarieschecksforheaderfileschecksfortypedefschecksforstructureschecksforcompilercharacteristicschecksforlibraryfunctionschecksforsystemservicesAC_OUTPUT([file...])
最好让每个宏调用在`configure.in'中占据单独的一行。
大部分宏并不添加额外的新行;它们依赖于在宏调用之后的新行以结束命令。
这种方法使得生成的configure脚本在不必添加大量的空行的情况下比较容易阅读。
在宏调用的同一行中设置shell变量通常是安全的,这是因为shell允许出现没有用新行间隔的赋值。
在调用带参数的宏的时候,在宏名和左括号之间不能出现任何空格。
如果参数被m4引用字符`['和`]'所包含,参数就可以多于一行。
如果你有一个长行,比如说一个文件名列表,你通常可以在行的结尾使用反斜线以便在逻辑上把它与下一行进行连接(这是由shell实现的,Autoconf对此没有进行任何特殊的处理)。
有些宏处理两种情况:
如果满足了某个给定的条件就做什么,如果没有满足某个给定的条件就做什么。
在有些地方,你可能希望在条件为真的情况下作些事,在为假时什么也不作。
反之亦然。
为了忽略为真的情况,把空值作为参数action-if-found传递给宏。
为了忽略为假的情况,可以忽略包括前面的逗号在内的宏的参数action-if-not-found。
你可以在文件`configure.in'中添加注释。
注释以m4预定义宏dnl开头,该宏丢弃在下一个新行之前的所有文本。
这些注释并不在生成的configure脚本中出现。
例如,把下面给出的行作为文件`configure.in'的开头是有好处的:
dnl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Autoconf 详解