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_FILESAM_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

猜你喜欢

转载自blog.csdn.net/SHRINKSHR/article/details/85839166
今日推荐