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和库的影响。其顺序应该是:

  1. AC_INIT(file)
  2. 程序选择测试
  3. 检查库文件
  4. 检查头文件
  5. 检查typedefs
  6. 检查结构体
  7. 检查编译器特征
  8. 检测库函数
  9. 检测系统服务
  10. 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的,下次再说