autotools 是否有 AC_ARG_ENABLE action-if-given 的缩写

autotools is there a short for AC_ARG_ENABLE action-if-given

我可能需要添加很多 AC_ARG_ENABLE,目前我正在使用下面的语法,这是我唯一能用的语法,但我想知道是否已经有一些 m4 宏用于我正在使用的简单 action-if-given 测试(我进行了一些搜索但尚未找到任何东西)或更清晰的语法。

我看过一些示例,它是空的 [] 但就是无法正常工作,我需要创建一个新宏吗?

AC_ARG_ENABLE([welcome],
    AS_HELP_STRING([--enable-welcome], [Enable welcome route example @<:@default=yes@:>@]),
    [case "${enableval}" in
        yes) enable_welcome=true ;;
        no)  enable_welcome=false ;;
        *) AC_MSG_ERROR([bad value ${enableval} for --enable-welcome]) ;;
     esac],[enable_welcome=true])
AM_CONDITIONAL([ENABLE_WELCOME], [test x$enable_welcome = xtrue])

这里是我如何在 Makefile.am

上使用它
if ENABLE_WELCOME
...
endif

我只是将 AC_ARG_ENABLE 与处理选项本身分开,以分离选项处理逻辑,并保持 configure.ac 易于阅读:

AC_ARG_ENABLE([welcome],
  [AS_HELP_STRING([--enable-welcome], [... description ... ])],,
  [enable_welcome=yes])

# i.e., omit '[<action-if-given>]', still sets '$enable_welcome'

enable_welcome=`echo $enable_welcome` # strip whitespace trick.
case $enable_welcome in
  yes | no) ;; # only acceptable options.
  *) AC_MSG_ERROR([unknown option '$enable_welcome' for --enable-welcome]) ;;
esac

# ... other options that may affect $enable_welcome value ...

AM_CONDITIONAL([ENABLE_WELCOME], [test x$enable_welcome = xyes])

当然,autoconf promotes 使用可移植的 shell 构造,例如 AS_CASEAS_IF 等。可能是 "right thing" 做,但我发现语法很烦人。如果我被 shell 限制所困扰,我想我将不得不考虑它们。

如果此 yes/no 构造频繁出现,您可以使用 AC_DEFUN 定义自己的函数,需要一些最小的 m4 概念。但是您应该能够找到大量关于如何访问函数参数和 return 值的示例。

我对这个问题进行了更深入的研究,目前下面的语法是最干净、紧凑且冗余较少的(IMO 仍然太多,我只是错过了一个替换粘贴)我可以开始工作了简单的启用选项,我只需要 yesno 以及默认值和错误消息:

AC_ARG_ENABLE([form-helper],
    AS_HELP_STRING([--enable-form-helper], [Enable Form helper @<:@default=yes@:>@]),
    [AS_CASE(${enableval}, [yes], [], [no], [],
             [AC_MSG_ERROR([bad value ${enableval} for --enable-form-helper])])],
    [enable_form_helper=yes])
AM_CONDITIONAL([ENABLE_FORM_HELPER], [test x$enable_form_helper = xyes])