1. #1
    Membre averti Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    septembre 2010
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2010
    Messages : 541
    Points : 305
    Points
    305

    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
    4 982
    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 : 4 982
    Points : 16 602
    Points
    16 602

    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
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    juin 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : juin 2016
    Messages : 26
    Points : 39
    Points
    39

    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
    4 982
    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 : 4 982
    Points : 16 602
    Points
    16 602

    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
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    3 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 3 553
    Points : 9 354
    Points
    9 354
    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
    4 982
    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 : 4 982
    Points : 16 602
    Points
    16 602

    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
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    3 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 3 553
    Points : 9 354
    Points
    9 354
    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
    Membre chevronné
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 459
    Points : 2 033
    Points
    2 033

    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
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    3 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 3 553
    Points : 9 354
    Points
    9 354
    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
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    juin 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : juin 2016
    Messages : 26
    Points : 39
    Points
    39

    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, 18h10
  2. Différences compilation Linux(make/gcc)/Windows(mingw)
    Par boelraty dans le forum Débuter
    Réponses: 2
    Dernier message: 28/07/2010, 10h46
  3. conversion std::vector<double> en std::vector<float>
    Par salseropom dans le forum C++
    Réponses: 10
    Dernier message: 10/06/2010, 11h51
  4. Réponses: 7
    Dernier message: 19/02/2010, 10h42
  5. Réponses: 3
    Dernier message: 04/12/2006, 14h01

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