configure.ac由一些宏组成(如果已经有源代码,你可以运行autoscan来产生一个configure.scan文件,在此基础修改成configure.ac将更加方便) 
最基本的组成可以是下面的

AC_INIT([PACKAGE], [VERSION], [BUG-REPORT-ADDRESS])
# Checks for programs.
# Checks for libraries.
# Checks for header les.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# Output les.
AC_CONFIG_FILES([FILES])
AC_OUTPUT

  

基本含义已经在上篇文章中介绍了,这里不再叙述。

AC_INIT(PACKAGE, VERSION, BUG-REPORT-ADDRESS)

autoconf 强制性初始化。告诉autoconf包名称,版本,一个bug报告emall。 
例如:

AC_INIT([hello], [1.0], [bug-report@address])

并且这些名称将出现在config.h,你可以在程序直接引用这些宏。

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "BUG-REPORT-ADDRESS" /* Define to the full name of this package. */
#define PACKAGE_NAME "FULL-PACKAGE-NAME" /* Define to the full name and version of this package. */
#define PACKAGE_STRING "FULL-PACKAGE-NAME VERSION" /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "full-package-name" /* Define to the version of this package. */
#define PACKAGE_VERSION "VERSION"

  

AC_PREREQ(VERSION)

需要的最低autoconf版本,如:AC_PREREQ([2.65])

AC_CONFIG_SRCDIR(FILE)

一个安全的检查。FILE将是一个发布的源文件。这让configure脚本确保自己运行在正确的目录中。如:AC_CONFIG_SRCDIR([src/main.c])

AC_CONFIG_AUX_DIR(DIRECTORY)

配置辅助脚本位置,如install-sh和depcomp等。如:AC_CONFIG_AUX_DIR([build-aux])

AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77, …

编译器检测。

AC_PROG_SED, AC_PROG_YACC, AC_PROG_LEX, …

发现好的实现并且设置变量SED,YACC,$LEX等。

AC_CHECK_PROGS(VAR, PROGS, [VAL-IF-NOT-FOUND])

将VAR定义为第一个发现的程序,如果没有发现就设置为VAL-IF-NOT-FOUND

AC_CHECK_PROGS([TAR], [tar gtar], [:])
if test "$TAR" = :; then
AC_MSG_ERROR([This package needs tar.])
fi

  

如果发现tar,gtar,就设置到变量$TAR中,如果没有发现就是设置为‘:’

AC_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS])

打印错误信息ERROR-DESCRIPTION并退出,EXIT-STATUS设置退出状态。

AC_MSG_WARN(ERROR-DESCRIPTION)

打印但是不退出。

AC_DEFINE(VARIABLE, VALUE, DESCRIPTION)

输出到configu.h中。

/* DESCRIPTION */
#define VARIABLE VALUE

  

AC_SUBST(VARIABLE, [VALUE])

定义变量$VARIABLE=VALUE,进入Makefile。 
如:AC_SUBST([FOO],[foo]) 
等价于 
FOO=foo 
AC_SUBST([FOO]) 
或者 
AC_SUBST([FOO]) 
FOO=foo

AC_CHECK_LIB(LIBRARY, FUNCT, [ACT-IF-FOUND], [ACT-IF-NOT])

检查库是否存在并且包括函数FUNCT。如果发现库就执行ACT-IF-FOUND,否则执行ACT-IF-NOT。 
例如:

AC_CHECK_LIB([efence], [malloc], [EFENCELIB=-lefence])
AC_SUBST([EFENCELIB])

  

稍后可以使用(EFENCELIB)在链接规则中。如果没有使用ACT−IF−FOUND项,并且库被发现存在。ACCHECKLIB将会做下面的操作,LIBS=”−lLIBRARYLIBS"和#dedefine HAVE_LIB{LIBRARY}。Autmake会在链接的时候使用$LIBS。

AC_CHECK_HEADERS(HEADERS…)

检查头HEADERS并且给每一个发现的头文件定义#define HAVE_HEADER_H 
例如:

AC_CHECK_HEADERS([sys/param.h unistd.h])
AC_CHECK_HEADERS([wchar.h])

  

检查sys/param.h unistd.h如果存在定义定义#define HAVE_SYS_PARAM_H,HAVE_UNISTD_H。 
注意:一般情况下不能转换的符号都用‘_’代替。 
你可以在你的头文件这么使用

#if HAVE_UNISTD_H
#include <unistd.h>
#endif

  

AC_CHECK_HEADER(HEADER, [ACT-IF-FOUND], [ACT-IF-NOT])

检查一个头文件。

AC_CONFIG_HEADERS(HEADERS…)

创建头文件的HEADER.in,HEADERS包含使用AC_DEFINE的定义。 
例如: 
AC_CONFIG_HEADERS([config.h]) 
将从config.h.in创建config.h。

AC_CONFIG_FILES([Makefile sub/Makefile script.sh:script.in])

Automake创建FILE.in从每一个有FILE.am的FILE。他也可以出来非Makefile。 
script.in

#!/bin/sh
SED='@SED@'
TAR='@TAR@'
d=$1; shift; mkdir "$d"
for f; do
"$SED" 's/#.*//' "$f" \
>"$d/$f"
done
"$TAR" cf "$d.tar" "$d"

  

.in是文件模板。@SED@、@TAR@将被AC_SUBST([SED]),AC_SUBST([TAR])替换。这样你就可以将配置中的变量传送到其他文件中去。 
Makefile.in也使用@XYZ@作为替换部分,但是Automake已经做了将所有的XYZ=@XYZ@的定义,你只需要简单使用$(XYZ)就可以了。

AM_INIT_AUTOMAKE([OPTIONS…])

检查automake尝试Makefile时的必要的工具。 
例如:AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 
一些可选的选项:

选项 解释
-Wall 打开全部警告
-Werror 将警告当错误处理
-foreign 放宽一些GNU标准需求
-1.11.1 需要automake的最低版本
-dist-bzip2 在使用make dist和make distcheck期间同时创建tar.bz2存档
-tar-ustar 使用ustar格式创建tar存档

AC_CONFIG_FILES([Makefile sub/Makefile])

写入Makefile.am和sub/Makefile.am文件

AM CONDITIONAL(NAME, CONDITION)

定义一个条件名NAME,CONDITION将由shell解释执行,如果成功NAME将被打开。 
举例:configure.ac

AC_CHECK_HEADER([bar.h], [use_bar=yes])
AM_CONDITIONAL([WANT_BAR], [test "$use_bar" = yes])

  

仅当当前系统中存在bar.h文件时打开WANT_BAR。

具体细节可以参考 
gnu automake

原文链接:http://blog.csdn.net/john_crash/article/details/49889949

编写configure.ac的更多相关文章

  1. configure.ac和Makefile.am的格式解析概述

    1. configure.ac和Makefile.am的格式解析概述 1.1. Autotools相关工具链 1.1.1. Autotools 1.1.2. 其他相关工具 1.2. 工具链的流程 1. ...

  2. configure.ac:32: error: possibly undefined macro: AC_DEFINE

    在ubuntu 下编译snappy时,在检查依赖关系时,处理autoconf的包时,在相关依赖包都已经安装的情况下,报如下错误,死活不过. configure.ac:32: error: possib ...

  3. configure.ac:20: error: Autoconf version 2.65 or higher is required

    安装thrift例如,下面的问题出现: configure.ac:20: error: Autoconf version 2.65 or higher is required wget http:// ...

  4. 解决 configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL

    当安装configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL If this token and others are le ...

  5. configure.ac中AC_CHECK_LIB的问题

    编译Linux程序时,使用configure.ac生成的configure程序,时常会出现AC_CHECK_LIB检查某个库失败 而相应库通常是存在的,只是依赖于其他的库,此时,需要乃至AC_CHEC ...

  6. configure.ac:8: error: Autoconf version 2.64 or higher is required

    安装Resource Agents的时候出现错误:configure.ac:9: error: Autoconf version 2.63 or higher is required.指的是autoc ...

  7. 懒人学习automake, Makefile.am,configure.ac(转)

    已经存在Makefile.am,如何生成Makefile? 步骤: [root@localhost hello]# autoscan .///在当前文件夹中搜索 [root@localhost hel ...

  8. configure.ac:3: error: Autoconf version 2.68 or higher is required

    configure.ac:3: error: Autoconf version 2.68 or higher is required 参考博客:https://blog.csdn.net/pretty ...

  9. 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile

    1 2 3 4 5 6 7 8 9 //根据configure.in和Makefile.am生成makefile的步骤,基于UBUNTU 12.04 1.autoscan (可选) 2.aclocal ...

随机推荐

  1. Python3.x:BeautifulSoup()解决中文乱码问题

    Python3.x:BeautifulSoup()解决中文乱码问题 问题: BeautifulSoup获取网页内容,中文显示乱码: 解决方案: 遇到情况也是比较奇葩,利用chardet获取网页编码,然 ...

  2. 20145303刘俊谦 《Java程序设计》实验四 实验报告

    实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网络&q ...

  3. 20145303 《Java程序设计》第8周学习总结

    20145303 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO和NIO2 1.NIO的定义 InputStream.OutputStream的输入输出,基本上是以 ...

  4. 从零开始玩转JMX(二)——Condition

    Notification 一个MBean提供的管理接口允许代理对其管理资源进行控制和配置.然而,对管理复杂的分布式系统来说,这些接口知识提供了一部分功能.通常,管理应用程序需要对状态变化或者当特别情况 ...

  5. helloworld:一个完整的WCF案例

    服务端 1.创建一个空的解决方案:WCFDemo: 2.创建一个宿主控制台程序:Host 3.右击Host项目,选择“添加”--“新建项”,选择“WCF服务”创建名为“Service1.cs”的服务 ...

  6. 什么是ZooKeeper(一)(通俗易懂)

    以前在做别的项目时用过zk,但没有过多深入的学习,本着通俗易懂.简单方便学习成本低的方式,建议大家耐心看完,如果文章中有不清楚的地方,可发私信进步探讨! 学习zk共分为二部分,第一部分主要以理论为主. ...

  7. (转)SQL Server中的索引结构与疑惑

    说实话我从没有在实际项目中使用过索引,仅知道索引是一个相当重要的技术点,因此我也看了不少文章知道了索引的区别.分类.优缺点以及如何使用索引.但关于索引它最本质的是什么笔者一直没明白,本文是笔者带着这些 ...

  8. JSP 发送邮件

    JSP 发送邮件 虽然使用JSP实现邮件发送功能很简单,但是需要有JavaMail API,并且需要安装JavaBean Activation Framework. 在这里下载最新版本的 JavaMa ...

  9. Nginx安装和使用

    Nginx简介 nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后 ...

  10. Git 常用命令和 Git Flow 梳理

    git 用 git 有一段时间了,之前没有详细地了解 git flow,导致协作过程中或多或少出现了一些头疼问题.最近静下心来理了下 git flow 的整个流程,再回头看开朗了不少,总结到这里.介绍 ...