autoconf的使用,帮你如何跨各种类UNIX平台惊醒你的代码调试~
来源:互联网 发布:mac系统iso镜像百度云 编辑:程序博客网 时间:2024/06/05 19:44
autoconf是一个用于 生成可以自动配置软件园代码包以适应各种类UNIX系统的shell脚本工具。由autoconf生成的配置脚本在运行时与autoconf是无关的,就是说配置脚本的用户并不需要拥有autoconf~
由autoconf生成的这些脚本通常被命名为configure,他们检查当前系统是否满足软件正常运行所需要的特征,并根据检查的到的信息生成makefile,使用者所需要的做的只有在软件发布的源程序目录中运行
./configure;剩下的工作不需要用户手工干预,because配置脚本可以自动的确定系统的类型。还可以对软件包可能需要的各种特征进行独立的测试.
autoconf需要宏处理工具GNU m4,版本必须》1.1。
1.let's build one
autoconf生成的配置脚本通常被称为configure,运行的时候,configure创建的文件有
- 一个或者多个makefile,并在每个子目录里面也有一个
- 还可能是.h文件
- config.status的脚本
- config.cache的脚本
- config.log的文件,包含了由编译程序输出的信息,以便出错调试
使用这些的前提是编写一个configure.in的文件,并作为autoconf的输入文件运行autoconf。当然还可能要便其他的文件,如果后面用到了再说把;
除了特殊情况之外,在configure.in中可以任意次序的调用autoconf定义的测试宏,但是在被个configure.in文件中必须在开始的时候调用AC_INIT宏,并且在结尾包含一个AC_OUTPUT调用,只有这两个宏是必需的。还要注意有些宏要求其他的宏在其前面被调用,否则生成配置脚本configure时会发出警告。
通常在列表后面的测试往往依赖于前面的测试,例如,库函数可能受到typedefs和库的影响。其顺序应该是:
- AC_INIT(file)
- 程序选择测试
- 检查库文件
- 检查头文件
- 检查typedefs
- 检查结构体
- 检查编译器特征
- 检测库函数
- 检测系统服务
- AC_OUTPUT(file..)
比如下面的这个例子:
此外还有很多注意信息 .
2.使用autoscan build configure.in文件
在大多数情况下是不用手工输入复杂的宏定义,要不麻烦死了,这里推荐工具autoscan,这个工具是个perl的脚本程序,它从源程序中抽取与函数调用相关的头文件信息,并且将其输出到configure.scan文件中,如果在命令行中给出目录参数就能指定autoscan检查源文件的目录路径。而configure.scan则可以作为软件包configure.in的初始版本。
之后就可以把configure.scan直接改名为configure.in,但是需要做些手工检查并安排某些宏的位置。另外,如果希望软件包使用一个配置头文件,则必须调用名为AC_CONFIG_HEADER的宏,还可能用到#if等指令。
3.使用autoscan build configure
有了configure.in文件后,就可以开始生成自动配置脚本configure了。要生陈configure,只需不带参数的运行autoconf命令。
下面我举个例子吧:
这是一个工程文件拉,里面的程序简单说就是animal是个父类,fish是它的子类,看过孙鑫的教程的都应该记得这个程序。首先我要先写个makefile出来;
使用命令:
gcc -MM Mainc.cpp animal.cpp fish.cpp ;得到各种关系,这个命令在上上篇文章里面有叙述~
然后我得到了各种依赖关系如图
,然后我写makefile,如图:
这里因为C++,所以我使用了g++,这个比较于gcc,更适合与C++。结果当然满足要求拉~
,然后还是对这个工程,我来生成前面讲的东西:
使用
$ autoscan;生成了configure.scan
$ cp configure.scan configure.in;生成了configure.in
$ autoconf;生成configure
然后目录为:
这时我打命令
$ ./configure;就完成了跨UNIX平台的脚本编写使用~
最后有一个错误,关于makefile.in的,下次再说
- autoconf的使用,帮你如何跨各种类UNIX平台惊醒你的代码调试~
- 帮你调试-Java1.4-assertions,断言使你的代码更加稳定
- 非常了不起的工具iNET----------帮你实现.NET项目跨平台运行.
- PtrManager 帮你省掉所有的复杂代码
- 几点建议帮你写出简洁的JS代码
- 几点建议帮你写出简洁的JS代码
- 几点建议帮你写出简洁的JS代码
- 一行代码帮你搞定全选的功能
- 揭秘钱包的神器如何帮你管好信用卡
- 【如何让别人心甘情愿的帮你?】还…
- 让你的代码帮你写代码--编译期注解
- css Sprties的使用,帮你更好的选择图片
- 你应该使用什么类型的UNIX
- JS帮你调试错误
- 提高你的调试代码的效率
- 要什么?我帮你写代码的时候也想知道你到底想要什么
- 你是怎么调试PHP代码的
- 功能强大的Xcode辅助工具Faux Pas:帮你找到各种隐形的bug
- Android真机调试方法
- 乐观锁和悲观锁
- oracle中用存储过程创建一张table
- 如何让zend studio 中文化
- weka 学习资料链接
- autoconf的使用,帮你如何跨各种类UNIX平台惊醒你的代码调试~
- VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法
- 几个安全研究的的站点
- 用shell脚本监控进程,挂掉后重启
- python中的汉字处理
- 用 Hadoop 进行分布式并行编程, 第 1 部分
- Android 学习笔记(十三):Activity-GridView
- java连接VPN 发送邮件
- C++实现图算法(一)