欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

7.测试结果

程序员文章站 2024-02-26 23:53:34
...

本系列文章均翻译自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)的*@[email protected]*到输出文件(Makefile)。如果值是新行,考虑使用AM_SUBST_NOTMAKE防止automake添加 variable = @[email protected] 到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:
       @[email protected]

能够对输出结果造成影响的环境变量(比如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。???

相关标签: Autoconf configure