IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

make gcc flag -std=c++11 ou -std=gnu++11


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut make gcc flag -std=c++11 ou -std=gnu++11
    Projet: https://github.com/TrinityCore/TrinityCore

    Précos : https://trinitycore.atlassian.net/wi...x+Requirements

    J'ai tout les requirements à la bonne version minimum :
    gcc --version
    gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609


    Bonjour à tous, je cherche à compiler un projet dispo sur github, j'ai suivis la doc fournie seulement j'obtiens une erreur lors du make sur celui-ci

    Je ne vois pas comment précsier le flag -std=c++11 ou -std=gnu++11 lors du lancement de mon make, sauriez-vous m'indiquer une piste ?

    Merci par avance


    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
     
    [  9%] Building CXX object src/common/CMakeFiles/common.dir/Common.cpp.o
    In file included from /usr/include/c++/5/cinttypes:35:0,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:44,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/Common.h:22,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/Common.cpp:19:
    /usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
     #error This file requires compiler and library support \
      ^
    In file included from /usr/include/c++/5/cinttypes:35:0,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:44,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/GitRevision.h:21,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/GitRevision.cpp:18:
    /usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
     #error This file requires compiler and library support \
      ^
    In file included from /home/userlocal/TRINITY/TrinityCore/src/common/GitRevision.h:21:0,
                     from /home/userlocal/TRINITY/TrinityCore/src/common/GitRevision.cpp:18:
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:145:9: error: ‘int64_t’ does not name a type
     typedef int64_t int64;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:146:9: error: ‘int32_t’ does not name a type
     typedef int32_t int32;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:147:9: error: ‘int16_t’ does not name a type
     typedef int16_t int16;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:148:9: error: ‘int8_t’ does not name a type
     typedef int8_t int8;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:149:9: error: ‘uint64_t’ does not name a type
     typedef uint64_t uint64;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:150:9: error: ‘uint32_t’ does not name a type
     typedef uint32_t uint32;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:151:9: error: ‘uint16_t’ does not name a type
     typedef uint16_t uint16;
             ^
    /home/userlocal/TRINITY/TrinityCore/src/common/Define.h:152:9: error: ‘uint8_t’ does not name a type
     typedef uint8_t uint8;

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    De base, tu as deux solutions:
    utiliser un compilateur qui fonctionne en C++11 de base, comme gcc dans ses versions récentes (6.bidule, par exemple)

    Comme le build est préparé avec CMake, il est possible qu'il y ait une option dédiée. Dans le dossier de build, lance "ccmake ."

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Par défaut
    Bonjour,
    je ne suis pas sûr que cela puisse t'aider, mais quand je suis sous Kdevelopp, j'indique dans mon fichier de d'indications à compiler (qui est CMakeLists.txt je crois ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     set(CMAKE_CXX_FLAGS " -std=c++11")
    ce qui permet de compiler un code en C++11.

    Voilà!

    Cordialement.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Sauf qu'il faudrait écrire set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11"), pour ne pas pourrir les réglages de l'utilisateur.

    Et ccmake est justement fait pour les ajustements de l'utilisateurs (ou cmake -D, etc)
    Notons aussi que tu pourrais franchement envisager --std=c++14, voire --std=c++1y

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ce n'est jamais terrible mettre des options spécifiques à un compilateur dans les propriétés de CMake alors qu'on les aimerait ne pas dépendre du compilateur (par essence même de CMake). Voir le premier point de cet article à ce sujet http://voices.canonical.com/jussi.pa...-antipatterns/

    Dans les version récentes de CMake, il existe des propriétés dédiés pour forcer la version du standard C++ à utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    Voir leur documentation :
    https://cmake.org/cmake/help/v3.7/va...e_cxx_standard
    https://cmake.org/cmake/help/v3.7/va...ndard_required

    Il est possible de spécifier des propriétés via la ligne de commande lors de la génération du projet donc une telle ligne doit peut-être résoudre le problème :
    cmake . -G "MinGW Makefiles" -DCMAKE_CXX_STANDARD=11

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Effectivement, c'est beaucoup mieux comme ça.
    Faut dire que je suis coincée avec une très vieille 2.8.11

  7. #7
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Ce n'est jamais terrible mettre des options spécifiques à un compilateur dans les propriétés de CMake alors qu'on les aimerait ne pas dépendre du compilateur (par essence même de CMake).
    Cela dit, parfois, il est utile de mettre des options spécifiques à un compilateur donné, notamment des options sur les avertissements. Mais, pour ne pas obliger l'utilisateur à utiliser ce compilateur, il faut protéger ces spécificités dans un if.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    	message(STATUS "The compiler is GCC.")
    	set(
    		CMAKE_CXX_FLAGS
    		"${CMAKE_CXX_FLAGS} -pedantic-errors -Wall -Wextra -Wshadow -Weffc++ -Wsuggest-override \
    		-Wold-style-cast -Wconversion -Woverloaded-virtual -Wpointer-arith -Wmissing-declarations \
    		-Wzero-as-null-pointer-constant -Winit-self -Wredundant-decls -Wcast-align -Wfloat-equal \
    		-Wunreachable-code -Wmissing-include-dirs"
    	)
    endif()
    Ainsi, quand plusieurs personnes maintiennent le projet, celles qui utilisent GCC s'accordent pour programmer de manière à éviter d'avoir des avertissements signalés par ces options-là.
    Cela dit, je reconnais que ça implique que les personnes qui utilisent GCC doivent alors repasser derrière le code de ceux qui n'utilisent pas GCC pour éliminer des avertissements.

Discussions similaires

  1. std::vector<Objet> ou std::vector<Objet*>
    Par darkman19320 dans le forum C++
    Réponses: 4
    Dernier message: 26/01/2012, 17h10
  2. Différences compilation Linux(make/gcc)/Windows(mingw)
    Par boelraty dans le forum Débuter
    Réponses: 2
    Dernier message: 28/07/2010, 09h46
  3. conversion std::vector<double> en std::vector<float>
    Par salseropom dans le forum C++
    Réponses: 10
    Dernier message: 10/06/2010, 10h51
  4. Réponses: 7
    Dernier message: 19/02/2010, 09h42
  5. Réponses: 3
    Dernier message: 04/12/2006, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo