GNU automake中的C ++ 11支持

时间:2012-12-15 05:02:09

标签: c++ autotools

我正在尝试将我的项目的构建系统移植到GNU autotools。代码需要使用-std=c++11-std=c++0x标志进行编译。我希望我的配置脚本检查编译器是否支持C ++ 11。我尝试将AX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"])添加到configure.ac文件,但configure因此错误而失败:

 ...
./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")'

2 个答案:

答案 0 :(得分:3)

希望在未来的autoconf版本中对C ++ 11有更全面的支持。同时,我在GNU autoconf archive中使用来自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]))

答案 1 :(得分:1)

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

您也可以查看文件aclocal.m4进行检查,其中aclocal应该复制它的定义。

此宏的定义不包含在基本autoconf包中,而是包含在autoconf档案中。所以你可能错过了这个包。 (包的确切名称可能在发行版之间有所不同,在Gentoo中为sys-devel/autoconf-archive,在Debian和Ubuntu中似乎是autoconf-archive