2012-12-15 3 views
2

내 프로젝트의 빌드 시스템을 GNU autotools로 이식하려고합니다. 코드는 -std=c++11 또는 -std=c++0x 플래그로 컴파일해야합니다. 컴파일러에서 C++ 11을 지원하는지 확인하도록 configure 스크립트를 원합니다. 나는 configure.ac 파일에 AX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"])을 추가하는 시도했지만이 오류와 함께 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에 대한 포괄적 인 지원이 추가되기를 바랍니다. 그 동안, 나는 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

당신이지고있어 오류가 AX_CHECK_COMPILE_FLAG에서 configure 스크립트에서 확장되지 올 것으로 보인다. AX_CHECK_COMPILE_FLAG을 grepping하여 확장 여부를 확인할 수 있습니다. configure. grep이 거기에서 찾으면 확장되지 않습니다.

파일 aclocal.m4을 확인하여 확인할 수도 있습니다. 여기에서 aclocal은 정의를 복사해야합니다.

이 매크로의 정의는 기본 autoconf 패키지에는 포함되어 있지 않지만 autoconf 아카이브에는 포함되어 있지 않습니다. 따라서이 패키지가 누락 된 것 같습니다. (패키지의 정확한 이름은 배포판에 따라 다를 수 있습니다. Gentoo에서는 sys-devel/autoconf-archive이며 데비안 및 우분투에서는 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 아직 :/ –