gpt4 book ai didi

c++ - 如何在 [action-if-true] 中执行多个操作

转载 作者:行者123 更新时间:2023-11-30 05:07:48 24 4
gpt4 key购买 nike

我们正在尝试测试 -pthread 可用性并在 CXXFLAGSLDFLAGS 中设置标志。我们不想使用 ax_pthread因为它使用了错误的编译器并为 C++ 项目设置了错误的标志。并根据Significance of -pthread flag when compiling , -pthread 是最便携的,所以我们想将它用于 CXXFLAGSLDFLAGS

我们添加到 configure.ac 的脚本是:

AC_ARG_ENABLE(tls,
AS_HELP_STRING([--enable-tls], [enable thread storage (default is yes)]),
ac_enable_tls=$enableval,
ac_enable_tls=yes)
AM_CONDITIONAL(HAS_PTHREADS, test $ac_enable_tls = yes)

if test "$ac_enable_tls" = "yes"; then
SAVED_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="-pthread"
AC_MSG_CHECKING([for pthread support])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
[AC_MSG_RESULT([-pthread]) && AC_SUBST([AM_CXXFLAGS], ["-pthread"]) && AC_SUBST([AM_LDFLAGS], ["-pthread"])],
[AC_MSG_FAILURE(["--enable-tls=yes but pthreads are not available"])]
)
CXXFLAGS="$SAVED_CXXFLAGS"
fi

结果是:

./configure: line 16173: syntax error near unexpected token `&&'
./configure: line 16173: ` && AM_LDFLAGS="-pthread"'

autoreconf --warnings=all 不产生与测试相关的警告。

我猜问题是在 AC_COMPILE_IFELSE 中尝试做三件事和 [action-if-true]。 Autoconf AC_COMPILE_IFELSE 文档没有告诉我们如何处理这种情况,也没有提供示例。

我们想在[action-if-true]中执行三个 Action :

  • 打印消息 pthread
  • AM_CXXFLAGS += -pthread
  • AM_LDFLAGS += -pthread

如何在 [action-if-true] 中执行多个操作?

最佳答案

我不清楚为什么要使用 && shell 运算符;如果前面的 m4 宏发出换行符,它将不起作用。您应该考虑使用 ; 或简单地使用多行。

在配置脚本中也很常见,只是在 AC_COMPILE_IFELSE 操作中设置一个 shell 变量,然后检查它。这避免了深度嵌套的 shell 代码,以及与 m4 引用/宏扩展相关的问题。这是来自 glibc 的示例:

  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>                      
void foo (int i, void *p)
{
asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
:: STAP_PROBE_ASM_OPERANDS (2, i, p));
}]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])

关于c++ - 如何在 [action-if-true] 中执行多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47115437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com