2012-12-15 63 views
2

我試圖將我的項目的buildsystem移植到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失敗,此錯誤:GNU automake中的C++ 11支持

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

你沒忘記的autoconf之前調用aclocal會? – v154c1

+0

@ v154c1我永遠不會這麼稱呼!我稱之爲automake然後是autoreconf。我現在測試它。調用'aclocal'沒有幫助 –

+0

參見http://stackoverflow.com/q/11909347/243712 – poolie

回答

3

希望在未來的autoconf版本中會有更全面的C++ 11支持。在此同時,我使用ax_cxx_compile_stdcxx_11.m4GNU autoconf archive一個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

你得到的錯誤似乎來自AX_CHECK_COMPILE_FLAGconfigure腳本不被擴大。您可以通過在configure中搜索AX_CHECK_COMPILE_FLAG來驗證它是否被擴展。如果grep在那裏找到它,那麼它不會被擴展。

您也可以通過查看文件aclocal.m4來檢查它,其中aclocal應該複製它的定義。

此宏的定義不包含在基本autoconf包中,但包含在autoconf存檔中。所以你可能錯過了這個包。 (軟件包的具體名稱可能因發行版而異,在Gentoo中爲sys-devel/autoconf-archive,在Debian和Ubuntu中似乎爲autoconf-archive)。

+0

你是對的。這在'configure'中是一樣的。 'cat ./configure | grep AX_CHECK_COMPILE_FLAG'的結果是:'AX_CHECK_COMPILE_FLAG(-std = C++ 0x,CXXFLAGS =「$ CXXFLAGS -std = C++ 0x」)' –

+0

你是否修復了這個問題?如果是的話,你是怎麼做到的? – Qsiris

+0

@Qsiris還沒有:/ –