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++

  1. #1
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    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 sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    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 ."
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Points : 46
    Points
    46
    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 sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    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
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    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 sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    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
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Ca semble être arrivé en 3.1.

    J'ai mis pas mal de temps à trouver cette propriété. Dans mes premiers essais de CMake, j'utilisais aussi la méthode que tu indiquais et ça pouvait me convenir car je n'utilisais que GCC. J'avais aussi trouvé une bricole comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    target_compile_features(nom-executable PUBLIC cxx_override)
    En gros, tu lui dis que tu veux utiliser le mot-clé override et comme c'est du C++11, ça le force à compiler en C+11 ou à avorter la génération du projet CMake. Pas top non plus mais plus portable.

    Courage, un jour tu seras libérée

  8. #8
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 106
    Points
    6 106
    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.

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    C'est effectivement une bonne facon de faire ! Je m'en sers aussi !

    Il suffit de rajouter les options équivalentes pour les autres compilateurs, facile

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Points : 46
    Points
    46
    Par défaut
    Effectivement, ma solution est très simpliste, et s'applique uniquement dans mon cas. Je m'en remets à vos solutions.

    Cordialement.

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