7.测试结果

本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question

一旦configure确定了哪些功能存在,它能做什么来记录信息呢?

  • 定义一个C处理器标识
  • 在输出文件中设置一个变量
  • 将configure运行的功能的结果保存在一个缓存文件中
  • 打印信息让用户知道测试结果

7.1 定义C处理器标识

对有响应的功能测试的普通做法就是定义一个C处理器标识来说明测试结果。

默认情况下,AC_OUPUT将这些宏定义的标识放在输出变量DEFS中。但是,如果使用了AC_CONFIG_HEADERS,将会代替创建DEFS

AC_DEFINE (variable, value, [description])
AC_DEFINE (variable)

通过定义C处理器的宏来定义variablevalue,可选地带上括号参数列表以处理带参的C宏。如果宏的参数列表存在,使用逗号分隔,可能使用...结束。

description只在使用AC_CONFIG_HEADERS时有用,作为注释放在config.h.in中。

传参只有variable时,默认value1

AC_DEFINE([PACKAGE_URL], ["https://www.winehq.org"], [Define to the home page for this package.]
AC_DEFINE_UNQUOTED (variable, value, [description])
AC_DEFINE_UNQUOTED (variable)

类似于AC_DEFINE,但是可以使用:引用($)、调用(``)、反斜杠(\)。

AC_DEFINE_UNQUOTED([GETGROUPS_T], [$ac_cv_type_getgroups],
            [getgroups return type.])

note:在其他宏或者shell代码调用这两个宏的时候,不要使用分号来分割AC_DEFINEAC_DEFINE_UNQUOTED的语句,使用空格或者换行。

do this:
    AC_CHECK_HEADER([elf.h],
       [AC_DEFINE([SVR4], [1], [System V Release 4]) LIBS="-lelf $LIBS"])
or this:
    AC_CHECK_HEADER([elf.h],
       [AC_DEFINE([SVR4], [1], [System V Release 4])
        LIBS="-lelf $LIBS"])

instead of this:
    AC_CHECK_HEADER([elf.h],
       [AC_DEFINE([SVR4], [1], [System V Release 4]); LIBS="-lelf $LIBS"])

7.2 设置输出变量

除了预置输出变量,还可以通过以下两个宏来设置输出变量。

AC_SUBST (variable, [value])

从shell变量创建输出变量。使AC_OUTPUT替换变量variable的值到输出文件中(一般是Makefile文件)。意思就是AC_OUTPUT使用shell变量variable的值替换输入文件(Makefile.in)的*@variable@*到输出文件(Makefile)。如果值是新行,考虑使用AM_SUBST_NOTMAKE防止automake添加 variable = @variable@ 到Makefile.in文件。

AC_SUBST([PACKAGE_RELEASE],
         [m4_esyscmd([build-aux/pkg-version --release])])

configure对应的语句

PACKAGE_RELEASE=44.gitb50346e
AC_SUBST_FILE (variable)

AC_OUTPUT插入(没有替换)文件(shell变量variable)内容到输出文件。

configure.ac:
       AC_SUBST_FILE([host_frag])
       host_frag=$srcdir/conf/sun4.mh

and then a Makefile.in could contain:
       @host_frag@

能够对输出结果造成影响的环境变量(比如CC),称作precious variable,通过AC_ARG_VAR声明。

AC_ARG_VAR (variable, description)

声明variableprecious variable,将它的描述放入变量的帮助文档部分./configure --help

precious variable意味着:

  • 通过AC_SUBST替换variable
  • configure运行的时候variable的值被保存到缓存中,包括没有通过命令行而是通过环境指定的情况。注意:保存的是variable的初始化的值,而不是在执行configure的时候找到的值。
  • 在运行两次configure的时候执行一致性检查。
  • 在自动重新配置的时候保留变量,就好像作为命令行参数传入一样。包括没有使用缓存的情况。

7.4 缓存结果

为了避免在多个configure脚本中重复检查一个功能或者在一个脚本中重复运行,可选地将测试结果保存到一个cache file

AC_CACHE_VAL (cache-id, commands-to-set-it)

确保cache-id标识的检查结果可用。如果检查结果再缓存文件中被读取了,打印结果被读取的信息;否则执行shell命令commands-to-set-it

AC_CACHE_CHECK (message, cache-id, commands-to-set-it)

AC_CACHE_VAL封装,关心打印信息。它为message调用AC_MSG_CHECKING,带参cache-id、commands调用AC_CACHE_VAL,带参cache-id调用AC_MSG_RESULT

7.5 输出信息

AC_MSG_CHECKING (feature-description)

提示用户configure正在检查一个特定的功能。必须后跟AC_MSG_RESULT打印检查结果和换行。--quiet--silent选项不会打印。

AC_MSG_CHECKING($PYTHON_NAME module: $1)
"$THIS_MODULE_PYTHON" -c "import $1" 2>/dev/null
if test $? -eq 0;
then
    AC_MSG_RESULT(yes)
else
    AC_MSG_RESULT(no)
AC_MSG_RESULT (result-description)

提示用户检查的结果,result-description一般是*‘yes’, ‘no’, or a file name*。

AC_MSG_WARN (problem-description)

发出警告,打印信息到标准错误输出。

AC_MSG_WARN([pyflakes not found])
AC_MSG_ERROR (error-description, [exit-status = ‘$?/1’])

提示一个错误,终止configure。*$?*是默认的,除非0变为了1。???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值