您的位置:首页 > 编程语言

autoconf的使用,帮你如何跨各种类UNIX平台惊醒你的代码调试~

2011-03-21 16:10 489 查看
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

有了configu

re.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的,下次再说
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: