configure.ac文件编写规则

1.生成:
configure.ac实际是由configure.scan移动而来,而configure.scan由autoscan生成.
2.作用
configure.ac(configure.in)是autoconf的输入文件.它包含检查可能在不同平台上有所不同的条件的测试.测试是通过实际调用autoconf宏来完成的.configure.ac由m4处理,产生configure。


3.规则:
宏定义的内容
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_PREREQ(version)
AM_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE([FULL-PACKAGE-NAME], [VERSION])
AC_DEFINE
AM_MAINTAINER_MODE
AM_ACLOCAL_INCLUDE(macros)
GNOME_INIT
AC_PROG_CC
AC_ISC_POSIX
AC_HEADER_STDC
AC_ARG_PROGRAM
AM_PROG_LIBTOOL
GNOME_COMPILE_WARNINGS
ALL_LINGUAS=”es”
AM_GNU_GETTEXT
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
AC_OUTPUT([Makefile])


下面我们逐一对例子中的代码进行一下解释,例子中以AC开头的宏来自autoconf,以AM开头的宏来自automake.可以从autoconf或automake中寻求帮助,这一点很有用.以GNOME开头的宏来自于Gnomemacros目录.这些宏都是用m4宏语言写的.如果将autoconf和automake安装在/usr目录下,autoconf和automake中的标准宏一般放在/usr/share/aclocal目录下.


AC_PREREQ(version)指示使用的autoconf的版本。


AC_INIT和AC_OUTPUT是配置脚本中唯一必须要有的两个宏。


AC_INIT总是configure.in中的第一个宏.它扩展为许多可由其他configure脚本共享的模板文件代码.这些代码解析传到configure中的命令行参数.这个宏的一个参数是一个文件名,这个文件应该在源代码目录中,它用于健全性检查,以保证configure脚本已正确定位源文件目录.


AM_CONFIG_HEADER指定了要创建的头文件,差不多总是config.h.创建的头文件包含由configure定义的C预处理符号.最低限度应该定义PACKAGE和VERSION符号,这样可以将应用程序名称和版本传送到代码中,而无须对它们硬编码(非公用的源文件应该包含config.h(#include)以利用这些定义.然而,不要将config.h文件安装到系统中,因为它有可能与其他的软件包冲突).


AM_INIT_AUTOMAKE初始化automake.传到这个宏里的参数是要编译的应用程序的名称和版本号(这些参数成为config.h中定义的PACKAGE和VERSION值).尽量不要使用3各参数,直接使用这个宏,[FULL-PACKAGE-NAME], [VERSION]会从AC_INIT获取.


AC_DEFINE 定义一个c预处理器宏例如AC_DEFINE(DEBUG)或AC_DEFINE(VERSION,"1.0")


AM_MAINTAINER_MODE关闭缺省时仅供程序维护者使用的makefile目标,并修改以使configure能理解–enable-maintainer-mode选项.–enable-maintainer-mode将maintaineronly目标重新打开.仅供维护者使用的makefile目标允许最终用户清除自动生成的文件,比如configure,这意味着要修复编译故障,必须安装有autoconf和automake软件.注意,因为autogen.sh脚本主要是给开发人员用的,autogen.sh会自动传递一个–enable- maintainer-mode选项给configure.


AM_ACLOCAL_INCLUDE指定一个附加的目录,用于搜索m4宏.在这里,它指定为macros子目录.在这个目录中应该有Gnome宏的拷贝.


GNOME_INIT给configure添加一个与Gnome相关的命令行参数个数,并为Gnome程序定义一些makefile变量,这些变量中包含了必要的预处理程序和链接程序标志.这些标志是由gnome-config脚本取得的.安装gnome-libs时会安装gnome- config脚本.


AC_PROG_CC定位C编译器.


AC_PROG_RANLIB如果是多线程的程序的话要加入这句话,要不运行automake命令时会出错.


AC_ISC_POSIX添加一些在某些平台上实现POSIX兼容需要的标志.


AC_HEADER_STDC检查当前平台上是否有标准的ANSI头文件,如果有,则定义STDC_HEADERS.


AC_ARG_PROGRAM添加一些选项到configure中,让用户能够修改安装程序的名称(如果在用户系统上碰巧有一个与要安装的程序名称相同的程序,这是很有用的).


AM_PROG_LIBTOOL是由automake用来设置libtool的用途的.只在计划编译共享库或动态可加载模块时才需要设置这个值.


GNOME_COMPILE_WARNINGS给gcc命令行添加许多警告选项,但是在其他绝大多数的编译器上什么也不做.


ALL_LINGUAS=“es”不是一个宏,只是一句shell代码.它包含一个由空格分隔的语言种类缩写表,对应于po子目录下的.po文件..po文件包含翻译成其他语言的文本,所以ALL_LINGUAS应该列出程序已经被翻译成的所有语言.


AM_GNU_GETTEXT由automake使用,但是这个宏会随gettext软件包发布.它让 automake执行一些与国际化相关的任务.


AC_SUBST输出一个变量到由configure生成的文件中.具体内容将在后面说明.


AC_OUTPUT项目中的每个Makefile.am应该有一个AC_OUTPUT.AC_INIT和AC_OUTPUT是配置脚本中唯一需要的两个宏.AC_OUTPUT生成构建过程所需的文件.列出将由./configure脚本输出的文件的名称.


4.参考:
http://www.adp-gmbh.ch/misc/tools/configure/configure_in.html


5.简单实例:
configure.ac:
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.


AC_PREREQ([2.69])
AC_INIT(hello, [1.0], [[email protected]])
AC_CONFIG_HEADERS([config.h])
AM_INTT_AUTOMAKE


# Checks for programs.
AC_PROG_CC


# Checks for libraries.


# Checks for header files.


# Checks for typedefs, structures, and compiler characteristics.


# Checks for library functions.


AC_OUTPUT([Makefile])

你可能感兴趣的:(configure.ac文件编写规则)