您的位置:首页 > 其它

GNU Autoconf手册翻译(1)

2009-02-03 17:01 267 查看
目录
1
介绍
2
Gnu软件创建系统
2.1
Automake
2.2
Gnulib
2.3
Libtool
2.4
Pointers
3
生成configure脚本
3.1
编写configure.ac文件
3.1.1
一个shell脚本编译器
3.1.2
Autoconf语言
3.1.3
标准的configure.ac布局
3.2
使用autoscan创建configure.ac文件
3.3
使用ifnames列出所有编译条件
3.4
使用autoconf创建configure脚本
3.5
使用autoreconf更新configure脚本
4
初始化和输出文件
4.1
初始化configure
4.2
关于autoconf版本问题
4.3
Configure里的注意事项
4.4
发现configure输入
4.5
输出文件
4.6
执行配置操作
4.7
创建配置文件
4.8
Makefiles里面的替换
4.8.1
预先设置输出变量
4.8.2
安装目录变量
4.8.3
改变的目录变量
4.8.4
创建时使用的目录
4.8.5
自动的重新生成
4.9
头文件配置
4.9.1
头文件配置模块
4.9.2
使用autoheader创建config.h.in
4.9.3
Autoheader宏
4.10
运行任意的配置命令
4.11
创建配置链接
4.12
在子目录里配置其他的包
4.13
默认前缀
5
存在性测试
5.1
一般行为
5.1.1
标准符号
5.1.2
默认的包含
5.2
替代程序
5.2.1
特殊的程序检查
5.2.2
一般的程序和文件检查
5.3
文件
5.4
库文件
5.5
库函数
5.5.1
C函数的可移植性
5.5.2
特殊的函数检查
5.5.3
一般的函数检查
5.6
头文件
5.6.1
头文件的可移植性
5.6.2
特殊的头文件检查
5.6.3
一般的头文件检查
5.7
声明
5.7.1
特殊的声明检查
5.7.2
一般的声明检查
5.8
结构
5.8.1
特殊的结构检查
5.8.2
一般的结构检查
5.9
类型
5.9.1
特殊的类型检查
5.9.2
一般的类型检查
5.10
编译器和预处理器
5.10.1 特别的编译器特征
5.10.2 一般的编译器特征
5.10.3 C编译器特征
5.10.4 C++编译器特征
5.10.5 Object C编译器特征
5.10.6 Erlang编译器和解释器特征
5.10.7 Fortran编译器特征
5.11
系统服务
5.12
Posix变种
5.13
Erlang库
6
编写测试
6.1
语言选择
6.2
编写测试程序
6.2.1
测试程序指导
6.2.2
测试函数
6.2.3
生成资源
6.3
运行预处理器
6.4
运行编译器
6.5
运行连接器
6.6
检查运行时行为
6.7
系统逻辑(systemology)
6.8
多案例(Multiple Cases)
7
测试结果
7.1
C预处理器符号的定义
7.2
设定输出变量
7.3
输出变量中的特殊字符
7.4
缓存结果
7.4.1
缓存变量名
7.4.2
缓存文件
7.4.3
缓存检查点
7.5
打印信息
8
使用m4编程
8.1
M4引用
8.1.1
活跃字符
8.1.2
一个宏调用
8.1.3
引用和参数
8.1.4
引用和嵌套宏
8.1.5
Changequotes是有害的
8.1.6
Quadrigraphs
8.1.7
Thumb的引用规则
8.2
使用autom4te
8.2.1
调用autom4te
8.2.2
自定义autom4te
8.3
使用M4sugar编程
8.3.1
重定义M4宏
8.3.2
来自M4sugar的诊断信息
8.3.3
转换支持
8.3.4
条件构造
8.3.5
循环构造
8.3.6
赋值宏
8.3.7
M4中的字符串操作
8.3.8
M4中的数学计算
8.3.9
M4中的集合操作
8.3.10 禁止的模式
8.4
使用m4sh编程
8.5
文件描述符宏
9
编写autoconf宏
9.1
宏定义
9.2
宏名字
9.3
报告错误
9.4
宏间依赖
9.4.1
事先需要的宏
9.4.2
检验的顺序
9.4.3
一次性(one-shot)宏
9.5
过时宏
9.6
编码风格
10
可移植的shell编程
10.1
脚本逻辑(shellology)
10.2
Here-文档
10.3
文件描述符
10.4
文件系统约定
10.5
脚本模式匹配
10.6
脚本替换
10.7
赋值
10.8
Shell脚本中的圆括号
10.9
Shell脚本中的斜杆
10.10
特殊的shell变量
10.11
shell函数
10.12
Shell内政命令的限制
10.13
常用工具的限制
11
可移植的make编程
11.1
普通make规则中的$<
11.2
Make规则的失败
11.3
Make宏名中的特殊字符
11.4
Make宏值中反斜杠-换行-换行(backslash-newline-newline)
11.5
Make注释中的反斜杠-换行(backslash-newline)
11.6
Makefiles中的长行
11.7
Make macro=value和子make(submakes)
11.8
Make宏MAKEFLAGS
11.9
Make宏SHELL
11.10
Make规则中的注释
11.11
Obj子目录和make
11.12
Make –k的退出状态
11.13
VPATH和Make
11.13.1
VPATH和双冒号(::)规则
11.13.2
显式规则中不支持$<
11.13.3
自动规则重写
11.13.4
Tru64 make不可思议的创建事先需要的目录
11.13.5
Make目标寻找
11.14
单一的后缀规则和分散的依赖
11.15
时间戳解析和make
12
可移植的c和c++编程
12.1
各种各样的不兼容性
12.2
整数溢出
12.2.1 整数溢出的基本知识
12.2.2 Code assuming wraparound overflow的例子
12.2.3 破坏wraparound数学运算的优化
12.2.4 符号溢出问题的实作建议
12.2.5 有符号整数除法和整数溢出
12.3
预处理器计算
12.4
空指针的属性
12.5
缓冲区溢出和下标错误
12.6
易变的对象
12.7
浮点的兼容性
12.8
退出的兼容
13
手动配置
13.1
指定系统类型
13.2
获取权威的系统类型
13.3
使用系统类型
14
Site配置
14.1
控制help输出
14.2
使用外部软件进行工作
14.3
选择打包选项
14.4
让你的帮助信息看起来更舒服
14.5
控制configure选项的测试
14.6
配置site详情
14.7
安装时变换程序名
14.7.1 变换选项
14.7.2 变换例子
14.7.3 变换规则
14.8
设置site默认值
15
运行configure脚本
15.1
基本安装
15.2
编译器和选项
15.3
为多种体系结构编译
15.4
安装名
15.5
可选特点
15.6
特殊系统
15.7
指定系统类型
15.8
共享默认定义变量
15.9
Configure调用
16
Config.status调用
17
过时的构造
17.1
过时的config.status调用
17.2
Acconfig.h
17.3
使用autoupdate更新configure.ac
17.4
过时的宏
17.5
从版本1升级
17.5.1 改变的文件名
17.5.2 改变的makefiles
17.5.3 改变的宏
17.5.4 改变的结果
17.5.5 改变的宏书写
17.6
从版本2.13升级
17.6.1 改变的引用
17.6.2 新宏
17.6.3 主机(hosts)和交叉编译
17.6.4 AC_LIBOBJ与LIBOBJS
17.6.5 AC_FOO_IFELSE和AC_TRY_FOO
18
用autotest生成测试套件
18.1
使用autotest测试套件
18.1.1 Testsuite脚本
18.1.2 Autotest日志
18.2
编写testsuite.at
18.3
运行testsuite脚本
18.4
创建testsuite脚本
19
关于autoconf的常见问题和解答
19.1
分发configure脚本
19.2
为什么需要gnu m4?
19.3
如何自举(bootstrap)
19.4
为什么不使用imake
19.5
如何#define安装目录
19.6
Autom4te.cache是什么
19.7
头文件存在但是无法编译
20
Autoconf的历史
20.1
创世纪(Genesis,原文为圣经名词,下同)
20.2
出埃及记(Exodus)
20.3
利未记(Leviticus)
20.4
民数记(Numbers)
20.5
申命记(Deuteronomy)
附录A:GNU 免费文档许可
附录B:索引
B.1 环境变量索引
B.2 输出变量索引
B.3 预处理符号索引
B.4 Autoconf宏索引
B.5 M4宏索引
B.6 Autotest
宏索引
B.7 程序和函数索引
B.8 概念索引

1.
介绍
一位物理学家,一位工程师和一位计算机科学家正在讨论上帝到底是干什么的。“当然是位物理学家,”物理学家说,“因为在创世纪的早期,上帝创造了光;而且你知道,麦克斯韦的方程,电磁波的波粒二象性,还有相对论的后果。。。”“是个工程师!”工程师说,“因为在创造光之前,上帝把混沌分成陆地是还有;这需要许多的工程师去处理这些泥巴,以及有条理的把固体和液体分离开。。。”这时,计算机科学家吼了起来:“那么那些混沌呢,你又认为他是怎么来的你,哈?”
——匿名者

Autoconf 是一个产生shell脚本的工具,这些脚本能够自动的配置软件源码包。使之能在各种POSIX类的操作系统上运行。Autoconf所生成的配置脚本在运行时,是跟Autoconf独立的,也就是说用户无需安装Autoconf。
Autoconf产生的配置脚本在运行时不需用户进行手动干预,甚至不需要指导系统类型的参数。事实上,它们逐个的检查它们所正在配置的软件包所需要的特性是否存在。(在每次检查之前,它们都会打印一行信息以说明他们正在检查哪一特性,这样在用户在等待脚本运行完成的过程中就不会感到很烦躁。)这样,它们能够很好的运用于各种posix系统的变种或者裁剪版上。也无需去维护一个列出每一种posix变种的每一个发行版所支持的特性的文件了。
对于每一个用到Autoconf的软件包,都会从一个模板文件生成一个配置脚本,这个模板文件列出了这个软件包需要或者使用的所有特性。在shell代码识别和响应一个系统特性之后,Autoconf就能使得这一特性被许多其他可能用到这一特性的软件所共享。如果之后又发现shell代码需要做一些调整,它也只需在一个地方做修改;整个配置脚本能够根据修改的代码自动的重新生成配置脚本。
那些不了解Autoconf的人都希望去重新开发它。但是要了解到Autoconf的首要目的是为了是用户(usr)的工作变得容易,其次的目的才是使维护者(maintainer)的工作变得容易。换句话说,它的首要目的不是为软件包维护者自动生成configure脚本(尽管那方面的改进很受欢迎,毕竟软件包的维护者构成了Autoconf的用户基础);相反的,Autoconf的目的是使configure对于每一个autoconfiscated包的终端用户来说能够简单一些,可移植性好一些,以及可预测。因此就此而言,Autoconf在这一目标上是相当成功的——大多数对Autoconf的抱怨都是集中在“编写Autoconf的输入文件上很困难”,而不是configure的行为。甚至那些不使用Autoconf的软件包也会提供一个configure脚本,对于这一类替代解决方法的抱怨是它们不符合gnu编码标准,而这一标准又是用户期望从自动生成的configure脚本中所看到的。
Metaconfig软件在目的上类似Autoconf,但是它所生成的脚本需要用户的手动干预,这在配置大型源码的时候显得非常不方便。跟metaconfig脚本不同,Autoconf支持交叉编译。
为了创建一个可移植的软件包,Autoconf并没有解决所有的问题,为了完整解决,它还需要跟Automake和Libtool等gnu构建工具配合使用。这些其他的工具能够完成像创建一个可移植的,递归的,包含所有标准目标的Makefile,连接共享库等等工作。参看第2章【gnu 构建系统】,第三页以获得更多信息。
Autoconf对c程序中#if宏的命名有一些限制。(参看B.3节【与处理器符号索引】,第303页)。
Autoconf需要GNU M4 1.4.5或者更高版本去生成脚本。它用到一些低版本的M4,例如1.3,所没有的特性。Autoconf跟M4 1.4.11及以上版本运行的更好,但是并不必须要这样高的版本。
查看17.5节【Autoconf 1】,第266页,获取从版本1升级Autoconf的信息。查看第20章【历史】,第289页以了解Autoconf开发的历史。查看第19章【FAQ】,第283页,获取对Autoconf一般问题的解答。
登录Autoconf页面获取最新信息,邮件列表的细节,bug列表等等。
你可以发送建议到Autoconf邮件列表。历史建议都已存档。
你可以发送错误报告到Autoconf
bugs邮件列表。历史的bug报告也被存档了。
如果可能,首先确认你的bug还没有在当前开发版本中得到解决,能够之前没有被报告过。确保准备所有必要的信息和一个简短的configure.ac文件,这些东西将可以证明问题的存在。
通过git可以获取Autoconf的开发树;查看Autoconf
summary以了解详情。或者查看the actual repository。匿名的cvs也可以使用,查看readme获取详情。通过讨论之前存档的补丁,可以发送跟当前git版本相关的补丁去审查Autoconf 补丁邮件列表;所有的评论都已经贴在只读的Autoconf评论邮件列表里面,当然,它也已经被存档了。
因为它的使命就是如此,因此Autoconf包本身只包含一组经常使用的宏,这些宏非常有用。但是,如果你希望去分享你的宏,或者寻找一些已存在的宏,可以查看Autoconf Macro Archive,Peter Simons维护着它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: