zoukankan      html  css  js  c++  java
  • 编写configure.ac

    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

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

  • 相关阅读:
    HTTP之get post
    eclipse启动maven项目
    IDEA创建的Web项目配置Tomcat并启动Maven项目
    看django源代码有感
    给计算机系学生的建议
    自己的一点看法
    专业学习的方法
    专业思考2013.2.26
    如何通过看书来学习技术
    技术成长路线
  • 原文地址:https://www.cnblogs.com/ranson7zop/p/8259679.html
Copyright © 2011-2022 走看看