【问题标题】:How do you do multiple actions if-true in an AS_IF?如果在 AS_IF 中为真,您如何执行多项操作?
【发布时间】:2018-01-06 21:10:35
【问题描述】:

所以,我正在努力将一个非常古老的 configure.in 改造成现代的 configure.ac,但我遇到了一个绊脚石。

我正在尝试使用 AS_IF 语句根据 PKG_CHECK_MODULESAC_ARG_ENABLE 的结果执行 1-3 件事,但我似乎无法强制它们进入 AS_IF action-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([test x$enable_bar = xyes],
    [AS_IF(
        [test x$bar_found = xyes],
        [AC_DEFINE([HAVE_BAR_SUPPORT],[1],[Define if bar support is enabled])],
        [AC_MSG_ERROR([*** bar requested but not found ***])])
    ]
)
AS_IF([test x$enable_bar = xyes],
    [AS_IF(
        [test x$bar_found = xyes],
        [AX_APPEND_LINK_FLAGS([$BAR_LIBS],[LDFLAGS])],
        [AC_MSG_ERROR([*** bar requested but not found ***])])
    ]
)
AS_IF([test x$enable_bar = xyes],
    [AS_IF(
        [test x$bar_found = xyes],
        [AX_APPEND_COMPILE_FLAGS([$BAR_CFLAGS],[CFLAGS])],
        [AC_MSG_ERROR([*** bar requested but not found ***])])
    ]
)

如您所见,它有效,但过于冗长。我希望能够在单个 AS_IF 中处理所有动作如果为真的东西@

【问题讨论】:

    标签: autotools pkg-config


    【解决方案1】:

    AS_IF 只是if ...; then ...; else ...; fi 的扩展

    因此,您可以在块中添加任意数量的代码,只要它们全部由换行符分隔即可:

    AS_IF([test x$enable_bar = xyes], [
      AS_IF([test x$xbar_found], [
        AC_DEFINE(...)
        AX_APPEND_LINK_FLAGS(...)
        AX_APPEND_COMPILE_FLAGS(...)
      ], [
        AC_MSG_ERROR(...)
    ])
    

    【讨论】:

    • 非常感谢,这正是我在语法和风格上所需要的。在 configure.ac 中以一种可读且看起来不可怕的方式格式化 m4 是很棘手的,所以支持它!
    猜你喜欢
    • 2021-06-19
    • 2021-11-19
    • 2018-03-27
    • 2017-07-10
    • 2021-07-17
    • 2021-02-10
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多