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_CASE
、AS_IF
等。可能是 "right thing" 做,但我发现语法很烦人。如果我被 shell 限制所困扰,我想我将不得不考虑它们。
如果此 yes/no
构造频繁出现,您可以使用 AC_DEFUN
定义自己的函数,需要一些最小的 m4
概念。但是您应该能够找到大量关于如何访问函数参数和 return 值的示例。
我对这个问题进行了更深入的研究,目前下面的语法是最干净、紧凑且冗余较少的(IMO 仍然太多,我只是错过了一个替换粘贴)我可以开始工作了简单的启用选项,我只需要 yes
或 no
以及默认值和错误消息:
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])
我可能需要添加很多 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_CASE
、AS_IF
等。可能是 "right thing" 做,但我发现语法很烦人。如果我被 shell 限制所困扰,我想我将不得不考虑它们。
如果此 yes/no
构造频繁出现,您可以使用 AC_DEFUN
定义自己的函数,需要一些最小的 m4
概念。但是您应该能够找到大量关于如何访问函数参数和 return 值的示例。
我对这个问题进行了更深入的研究,目前下面的语法是最干净、紧凑且冗余较少的(IMO 仍然太多,我只是错过了一个替换粘贴)我可以开始工作了简单的启用选项,我只需要 yes
或 no
以及默认值和错误消息:
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])