编写configure.ac

原创 2015年11月17日 17:52:03

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)使ACTIFFOUNDACCHECKLIBLIBS=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

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

大型项目使用Automake/Autoconf完成编译配置

大型项目使用Automake/Autoconf完成编译配置 使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使...

Makefile 实际用例分析(三) ------- 是用GUN automake 处理自己的工程

前面两篇已经说过了自己怎么去为一个工程写makefile: 第一篇 第二篇 现在这一篇说的是怎么使用GNU的工具去写一个符合开源标准的Makefile呢! 首先我觉你应该参考: Automak...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

第四部分 在configure.in中使用宏来检测

+++++++++++++++++++++++++ 第四部分 在configure.in中使用宏来检测 ++++++++++++++++++++++++一、如何自动搜索库并配置 -I和-L:1. 库带...

第一部分 Autotools 基础 介绍

+++++++++++++++++++++++++ 第一部分 Autotools 基础 介绍 ++++++++++++++++++++++++++++(注意:要实际用的开发模式,见第二部分以后。)Th...

现在我们用automake来管理我们前面所建立的函数库

系统程序员成长计划-工程管理(三)1,549 views|2009-04-09|李先静|系统程序员成长计划| | 12 条评论转载时请注明出处和作者联系方式文章出处:http://www.limode...

GCC编译详解+Gdb调试器+Make工程管理器

Linux下编程的重要部件((摘自 http://www.cnblogs.com/azraelly/archive/2012/07/07/2580839.html ,主要涉及了gcc、gdb、Make...

第二部分 Automake的标准工程组织

++++++++++++++++++++++++++++ 第二部分 Automake的标准工程组织:+++++++++++++++++++++++++++一、总体上的目录:一般会有如下目录和文件,这些...

第三部分 Makefile 的工程组织

+++++++++++++++++++++++++ 第三部分 Makefile 的工程组织 ++++++++++++++++++++++++写在前面的话:如果库1依赖于库2,用户只用lib1的话,我还...

configure.ac范例一

检查头文件AC_CHECK_HEADERS([headers]) 例如:AC_CHECK_HEADERS([unistd.h windows.h])这个宏将在当前建造环境下检查unistd.h,wi...

懒人学习automake, Makefile.am,configure.ac

已经存在Makefile.am,如何生成Makefile? 步骤: [root@localhost hello]# autoscan .///在当前文件夹中搜索 [root@localhost ...
  • maray
  • maray
  • 2011-08-10 16:17
  • 13427
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)