微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

autoconf AS_IF 似乎评估了两个分支

如何解决autoconf AS_IF 似乎评估了两个分支

我正在为 configure.ac 中的 AS_IF 宏苦苦挣扎,任何帮助都得到了帮助。 这个问题类似于autoconf-as-if-doesnt-execute-correct-branch,但那里的解决方案不适用于我的问题。

看起来,AS_IF 的两个分支中的 m4 宏都被评估了,即使它们不应该(至少,我不希望它们)。 可能只是我误解了 AS_IF 应该如何工作。

我的 configure.ac

中有此示例代码
dnl Define IFTEST_YES if the first argument is provided
AC_DEFUN([IFTEST],[
 AC_MSG_NOTICE([iftest ($1)])
 m4_ifval([$1],[m4_define([IFTEST_YES],[yes])])
])

dnl Either call IFTEST with argument or without,depending on condition
AS_IF([test "x" = y],[IFTEST([yes])],[IFTEST([])])

dnl Check whether IFTEST_YES is set
m4_ifset([IFTEST_YES],AC_MSG_NOTICE([is set]),AC_MSG_NOTICE([is not set]))

构建并运行 configure 脚本后,我希望得到输出

 configure: iftest ()
 configure: is not set

但是,我得到了输出

 configure: iftest ()
 configure: is set

注意,如果我只执行

  IFTEST([])

在没有 AS_IF 的情况下,我得到了预期的输出

请向我解释,这里发生了什么。 加分,如果你能告诉我如何实现我想要的(IFTEST 函数内 IFTEST_YES 变量的条件设置)。

非常感谢您。

在你问之前,为什么我做这个构造,为什么我在这里使用 m4_ifvalm4_ifset:在我的用例中,IFTEST 函数m4_ifval/m4_ifset 来了来自第三方库。 根据我的库中的设置,我想使用或不使用参数调用这个第三方函数(以切换 m4 定义)。

编辑:我在 Ubuntu 18.04.5 LTS 上使用 GNU automake 1.15.1 版。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。