如何在Autoconf的AS_IF语句if-true分支执行多个操作?
简化Autoconf中AS_IF条件分支的写法
嘿,我完全懂你现在的困扰——重复写好几遍几乎一模一样的条件判断,不仅代码冗余,后期维护也容易出问题。咱们可以把这三个操作整合到同一个嵌套的AS_IF结构里,只需要做一次条件检查,就能完成所有需要的操作,同时错误提示也只需要写一次。
修改后的代码:
# Check for libbar PKG_CHECK_MODULES([BAR],[bar],[bar_found=yes],[bar_found=no]) AC_ARG_ENABLE([bar], AS_HELP_STRING([--enable-bar],[enable support for bar [default=yes]])) # 整合所有逻辑到单个AS_IF结构中 AS_IF([test x$enable_bar = xyes], [AS_IF([test x$bar_found = xyes], [ AC_DEFINE([HAVE_BAR_SUPPORT],[1],[Define if bar support is enabled]) AX_APPEND_LINK_FLAGS([$BAR_LIBS],[LDFLAGS]) AX_APPEND_COMPILE_FLAGS([$BAR_CFLAGS],[CFLAGS]) ], [AC_MSG_ERROR([*** bar requested but not found ***])] )] )
关键说明:
- 外层的
AS_IF只检查一次enable_bar是否为yes,避免重复判断 - 内层的
AS_IF检查bar_found状态:- 如果为yes,就把原来三个分散的操作(定义宏、添加链接 flags、添加编译 flags)放到同一个方括号包裹的代码块里,用换行分隔即可(Autoconf支持多行的action块)
- 如果为no,只触发一次错误提示,不用重复写三次
另外,你还可以稍微优化一下默认值的写法,在AC_ARG_ENABLE里明确指定默认状态,让逻辑更清晰:
AC_ARG_ENABLE([bar], AS_HELP_STRING([--enable-bar],[enable support for bar [default=yes]]), [], # action-if-given [enable_bar=yes] # action-if-not-given,明确设置默认值 )
这样你的configure.ac代码会更简洁、易读,也更符合现代Autoconf的最佳实践。
内容的提问来源于stack exchange,提问作者hanetzer
相关产品推荐
相关产品推荐

