20.条件语句
这些条件语句和Make的条件语句不一样。Automake的条件语句的检查是在运行configure脚本的期间,影响的是Makefile.in -> Makefile
。
条件语句的使用¶
AM_CONDITIONAL (name, condition)¶
在使用条件语句之前,必须在configure.ac的此宏中定义。
该宏的作用就是执行condition,将真假结果返回给name。
name必须由字母开头且只能由字母、数字和下划线组成,并且不能是Automake的保留字。
当configure运行的时候shell脚本condition会被执行。
注意每次运行configure的时候每个AM_CONDITIONAL
都必须被调用,否则会混淆automake。此宏中定义的判断语句可在Makefile.am中被调用。
AC_ARG_ENABLE([debug],
[ --enable-debug Turn on debugging],
[case "${enableval}" in
yes) debug=true ;;
no) debug=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],[debug=false])
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
然后你可以在Makefile.am中这样使用(make语法):
if DEBUG
DBG = debug
else
DBG =
endif
noinst_PROGRAMS = $(DBG)
为了可以获取在configure.ac中此宏注册的条件语句,并且允许条件的定义AC_CONFIG_FILES
,AM_COND_IF
可能会被使用:
AM_COND_IF (conditional, [if-true], [if-false])¶
如果任一分支包含AC_CONFIG_FILES
,会导致automake仅针对相应的条件输出相应文件的规则。
AM_CONDITIONAL([SHELL_WRAPPER], [test "x$with_wrapper" = xtrue])
AM_COND_IF([SHELL_WRAPPER],
[AC_CONFIG_FILES([wrapper:wrapper.in])])
条件语句的限制¶
条件语句应该完整的包括变量或规则的定义。例如,Automake无法处理在变量定义中的使用条件语句:
# This syntax is not understood by Automake
AM_CPPFLAGS = \
-DFEATURE_A \
if WANT_DEBUG
-DDEBUG \
endif
-DFEATURE_B