2

I'm trying to port buildsystem of my project to GNU autotools. The code need to be compiled with -std=c++11 or -std=c++0x flag. I want my configure script to check if compiler supports C++11 or not. I tried adding AX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"]) to configure.ac file but configure fails with this error:

 ...
./configure: line 2732: syntax error near unexpected token `-std=c++0x,'
./configure: line 2732: `AX_CHECK_COMPILE_FLAG(-std=c++0x, CXXFLAGS="$CXXFLAGS -std=c++0x")'
4

2 回答 2

3

希望在未来的 autoconf 版本中对 C++11 有更全面的支持。同时,我使用GNU autoconf 存档ax_cxx_compile_stdcxx_11.m4中的 C++11 源代码测试:

AC_PROG_CXX
AC_LANG_PUSH([C++])

AC_COMPILE_IFELSE([AC_LANG_SOURCE(
  [[template <typename T>
    struct check
    {
      static_assert(sizeof(int) <= sizeof(T), "not big enough");
    };

    typedef check<check<bool>> right_angle_brackets;

    int a;
    decltype(a) b;

    typedef check<int> check_type;
    check_type c;
    check_type&& cr = static_cast<check_type&&>(c);]])],,
  AC_MSG_FAILURE(['$CXX $CXXFLAGS' does not accept ISO C++11]))
于 2012-12-15T06:04:36.997 回答
1

您遇到的错误似乎来自AX_CHECK_COMPILE_FLAG未在configure脚本中扩展。AX_CHECK_COMPILE_FLAG您可以通过 grepping in来验证它是否被扩展configure。如果 grep 在那里找到它,那么它不会被扩展。

您也可以通过查看 file 来检查它aclocal.m4,应该在哪里aclocal复制它的定义。

该宏的定义不包含在基本autoconf包中,而是包含在autoconf档案中。所以你可能错过了这个包。(软件包的确切名称可能因发行版而异,它sys-devel/autoconf-archive在 Gentoo 中,似乎autoconf-archive在 Debian 和 Ubuntu 中)。

于 2012-12-15T06:03:01.483 回答