2

プロジェクトのbuildsystemをGNUautotoolsに移植しようとしています。-std=c++11コードはまたは-std=c++0xフラグを付けてコンパイルする必要があります。configureスクリプトで、コンパイラがC++11をサポートしているかどうかを確認したいと思います。ファイルに追加しようとしAX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"])ましたが、このエラーで失敗します:configure.acconfigure

 ...
./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のより包括的なサポートがあるでしょう。それまでの間、 GNUautoconfアーカイブ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で展開されていないことが原因のようです。でgrepを実行すると、configure展開されているかどうかを確認できます。grepがそこでそれを見つけた場合、それは展開されません。AX_CHECK_COMPILE_FLAGconfigure

ファイルを調べて確認することもできます。ファイルの定義をコピーする必要aclocal.m4があります。aclocal

このマクロの定義は、基本autoconfパッケージには含まれていませんが、autoconfアーカイブに含まれています。したがって、おそらくこのパッケージが不足しています。(パッケージの正確な名前はディストリビューション間で異なる場合があります。Gentooにあり、DebianとUbuntusys-devel/autoconf-archiveにあるようです)。autoconf-archive

于 2012-12-15T06:03:01.483 に答える