2012-12-15 2 views
2

J'essaie de porter le système de construction de mon projet sur GNU Autotools. Le code doit être compilé avec -std=c++11 ou -std=c++0x. Je veux que mon script configure vérifie si le compilateur supporte C++ 11 ou non. J'ai essayé d'ajouter AX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"]) au fichier configure.ac mais configure échoue avec cette erreur:Prise en charge de C++ 11 dans l'automate GNU

... 
./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

ne vous ai pas oublier d'appeler aclocal avant autoconf? – v154c1

+0

@ v154c1 Je n'appelle jamais ça! J'appelle 'automake' puis' autoreconf'. Je l'ai testé maintenant. appeler 'aclocal' n'aide pas –

+0

Voir aussi http://stackoverflow.com/q/11909347/243712 – poolie

Répondre

3

J'espère que la prise en charge de C++ 11 sera plus complète dans les prochaines versions d'autoconf. Dans le même temps, j'utiliser un test source 11 C++ de ax_cxx_compile_stdcxx_11.m4 dans le GNU autoconf archive:

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

L'erreur que vous obtenez semble venir de AX_CHECK_COMPILE_FLAG pas étendu dans votre script configure. Vous pouvez vérifier s'il est étendu en remplissant AX_CHECK_COMPILE_FLAG dans configure. Si le grep le trouve là, alors il n'est pas développé.

Vous pouvez également le vérifier en recherchant dans le fichier aclocal.m4, où aclocal devrait copier sa définition.

La définition de cette macro n'est pas incluse dans le package autoconf de base, mais dans les archives autoconf. Donc vous manquez probablement ce paquet. (Le nom exact du paquet peut différer entre les distributions, il est sys-devel/autoconf-archive dans Gentoo et il semble être autoconf-archive dans Debian et Ubuntu).

+0

Vous avez raison. C'est comme dans 'configure'. 'cat ./configure | Le résultat de grep AX_CHECK_COMPILE_FLAG' est: 'AX_CHECK_COMPILE_FLAG (-std = C++ 0x, CXXFLAGS =" $ CXXFLAGS -std = C++ 0x ")' –

+0

Avez-vous corrigé cela? Si oui, comment l'avez-vous fait? – Qsiris

+0

@Qsiris Pas encore:/ –