β

大型项目使用Gnu AutoMake/Autoconf完成编译配置(4)—生成configure.a

勇敢的程序猿 141 阅读

自动生成configure.ac

1、configure.ac的标准结构

学习编写之前,我们首先了解下configure.ac中都有哪些内容吧。
configure 中的Autoconf宏的顺序并不是十分重要的,个别的例外( Autoconf中定义了大量的宏操作,比如定义、检查、输出等 )。每个configure.ac开头必须包含一个称作 AC_INIT 的宏,并且末尾必须包含一个 AC_OUTPUT 的宏。另外,对于一些被其他宏依赖的宏,必须出现在前面先被调用,因为这些宏需要检查一些变量的值来确定接下来该怎么做。而且,如果顺序不正确的话在configure的过程中会有警告。

当然,为了保持书写过程中的一致性,这里有一个建议的Autoconf宏的顺序。通常来说,出现的后面的宏一般都可以依赖前面出现的宏。比如说,库函数会受到一些类型和库影响。
下面是一个例子:

AC_INIT(package, version, bug-report-address )
information on the package
checks for programs
checks for libraries
checks for header files
checks for types
checks for structures
checks for compiler characteristics
checks for library functions
checks for system services
AC_CONFIG_FILES([file...])
AC_OUTPUT

2、使用autosacn来创建configure.ac

autoscan 程序可以帮助我们创建或者维护一个软件包中configure.ac的文件。autoscan自动扫描检查源文件根目录下的目录树(如果指定目录)或者是当前的目录(未指定)。autoscan通过搜索元文件查找常见的移植性文件,并且创建 configure.scan 文件,这个文件就是configure.ac的前身。并且检查已有的configure.ac是否完整。

当然,在使用了autoscan创建configure.scan文件后,我们在重命名为configure.ac前最好手动检查下,有时候会需要一个调整。autoscan偶尔也会输出一些错误顺序的宏,然后autoconf就会发出警告,这时候我们需要手动调整下顺序。如果我们想在源码包中使用配置头文件(通常为config.h),我们必须添加一个 AC_CONFIG_HEADER 宏,我们也可能会需要增加或修改一些 #if条件定义 ,来帮助Autoconf完成工作。
在使用autoscan来生成configure.ac的时候,通常简单的增加一些建议的条件,在autoscan.log中包含了每个宏为什么是必须的。

autoscan 在源码包中发现特殊的标识时会使用多个数据文件来决定输出哪些宏(macro),这些数据文件的格式使一致的:每行包含一个标识,一个或者多个空格,如果遇到一个标识就输出相应的宏,行首#表示注释。

3、使用ifnames来输出条件

ifnames可以帮助我们为一些源码包编写configure.ac,它可以打印出这个包中已有的正在使用的C 预处理器条件,它可以帮助填写一些有autoscan生成的configure.ac的不足。ifnames扫描所有的c源文件,并按顺序以#if,#elif,#ifdef,#ifndef的形式输出。

4、使用autoconf创建configure

使用autoconf程序执行(不带参数)autoconf会使用m4宏处理器和Autoconf宏来处理configure.ac,如果加参数执行的话,autoconf会读取参数指定的文件而不是configure.ac,如果参数是 - 的话,会从标准输入中读取并输出到标准输出。

Autoconf宏定义在多个文件中,有些文件使Autoconf生成的,由autoconf优先读取,然后autoconf再检查 acsite.m4 文件查看包含Autoconf的其他文件。

5、使用autoreconf来更新configure脚本文件

为GNU Build System安装不同的组件却是很烦人,比如运行autopoint来安装Gettext,在各个目录下automake来生成Makefile.in等等,但是有时候这些都是必须的,如果因为一些改动比如说-更新configure.ac了,还得重新再来一次。

autoreconf 可以看做是autoconf、autoheader、acloacl、automake、libtoolize、autopoint的组合体,而且会以合适的顺序来执行。

貌似到这里还是不知道configure怎么来的,基础概念及过程清楚了,我们下面一节就通过automake自带的例子amhello-1.0.tar.gz,来看看怎么实现自动化编译配置的。

自动生成configure.ac

1、configure.ac的标准结构

学习编写之前,我们首先了解下configure.ac中都有哪些内容吧。

作者:勇敢的程序猿
IT style! 原始网站 , 有些问题可以去这里找找! www.braveprogrammer.com.