【发布时间】:2017-11-04 20:43:13
【问题描述】:
我们正在尝试测试-pthread 的可用性并在CXXFLAGS 和LDFLAGS 中设置标志。我们不想使用ax_pthread,因为它使用了错误的编译器并为 C++ 项目设置了错误的标志。而根据Significance of -pthread flag when compiling 的说法,-pthread 是最便携的,所以我们想将它用于CXXFLAGS 和LDFLAGS。
我们添加到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]中执行三个动作:
- 打印消息
pthread AM_CXXFLAGS += -pthreadAM_LDFLAGS += -pthread
如何在[action-if-true] 中执行多项操作?
【问题讨论】: