85 votes

Comment activer C++11 dans Eclipse Juno/Kepler/Luna CDT ?

EDIT : Il s'avère que ce n'est pas vraiment spécifique à Eclipse Kepler. J'ai dû utiliser le même processus pour Eclipse Juno. Le problème est qu'il semble y avoir des étapes manquantes dans d'autres posts répondant à cette même question.

J'utilise Eclipse Kepler pour C++ et j'essaie d'utiliser C++11 et j'obtiens des erreurs. Lorsque je compile, j'obtiens l'erreur

erreur : les boucles-for basées sur l'intervalle ne sont pas autorisées en mode C++98

J'ai suivi les instructions de l'article

Support d'Eclipse CDT C++11/C++0x

et la solution donnée pour Eclipse Juno ne fonctionne pas.

Différents commentaires ont suggéré de redémarrer eclipse, de nettoyer et de reconstruire. Cela n'a pas fait de différence.

182voto

MrEricSir Points 1856

Il y a deux choses que vous devez faire, d'abord vous devez configurer votre compilateur, ensuite vous devez configurer le processeur de langage de CDT. Puisque vous n'avez pas mentionné quel compilateur vous utilisez, je vais supposer que c'est GCC mais les étapes seront similaires pour d'autres compilateurs. (Notez que vous avez besoin d'un compilateur qui supporte C++11, bien sûr).

La configuration du compilateur est assez simple :

  1. Cliquez à droite sur votre projet et cliquez sur Propriétés
  2. Sous C/C++ Build, cliquez sur Settings
  3. Sous Compilateur GCC C++, cliquez sur Divers.
  4. Dans la zone Autres drapeaux, ajoutez "-std=c++11" à la liste des jetons.
  5. Cliquez sur Appliquer et OK

À ce stade, vous devriez être en mesure de reconstruire votre projet et de le faire fonctionner. Mais CDT peut encore montrer des erreurs pour les inclusions C++11. Voici comment vous pouvez résoudre ce problème :

  1. Cliquez à droite sur votre projet et cliquez sur Propriétés
  2. Sous C/C++ General, cliquez sur "Preprocessor Include Paths, Macros".
  3. Sélectionnez l'onglet Fournisseurs
  4. Il devrait y avoir un élément dans la liste qui dit quelque chose comme "GCC Built in Compiler Settings". Sélectionnez cette entrée.
  5. Décochez l'option "Utiliser le fournisseur global...".
  6. Sous la liste, il y a une case qui dit "Commande pour obtenir les spécifications du compilateur". Ajoutez "-std=c++0x" à cette commande.
  7. Déplacez le fournisseur "GCC Built in Compiler Settings" en haut de la liste en utilisant le bouton "Move Up" sur la droite.
  8. Cliquez sur Appliquer, puis sur OK.
  9. De retour dans votre espace de travail Eclipse, sélectionnez le menu Projet, Index C/C++, et cliquez sur "Re-resolve unresolved includes".

1 votes

Merci. Cela a fonctionné. Peut-être que j'ai mal lu l'autre message dont j'ai fait le lien, mais il semble qu'il n'y avait aucune mention de la configuration du compilateur dans ce message.

1 votes

Ça ne marche pas pour moi. Mon principal problème est l'inclusion non résolue de c++11. Je mets -std=c++11 à l'endroit où vous avez dit de le mettre, et j'ai reconstruit l'index complet, il y a toujours un tas de std::cout, std::set non reconnus, etc

2 votes

EDIT : Je n'ai pas trouvé la première partie là où elle devrait, mais je compile via make, donc cela peut être une explication. (Je l'ai trouvé dans la configuration de l'espace de travail et l'ai défini). Mais je l'ai mis dans le fichier compiler spec et cela ne fonctionne toujours pas. std::shared_ptr et autres ne sont pas reconnus. Bien que cela fonctionnait sur l'ancienne machine avec juno.

25voto

MeJ Points 335

Prise en charge de C++11 dans Eclipse Kepler Service Release 1 (Build id : 20130919-0819)

Dans la dernière version Eclipse Kepler SR1, il suffit d'ajouter -std=c++11

  1. Cliquez à droite sur votre projet et cliquez sur Propriétés
  2. Naviguez vers C/C++ général y Chemins d'inclusion du préprocesseur, macros, etc.
  3. Sélectionnez le Prestataires onglet
  4. Ajouter -std=c++11 a Commande pour obtenir les spécifications du compilateur :
  5. Appliquez les changements, l'index devrait être généré automatiquement.

El "Commande pour obtenir les spécifications du compilateur :" -devrait ressembler à ceci :

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11

2 votes

Avec GCC, j'ai dû ajouter -std=c++0x

0 votes

Quel GCC utilisez-vous ? c++0X était l'ancien nom (alias) de C++11.

1 votes

J'ai trouvé cela une deuxième fois en configurant un nouveau CDT d'éclipse - cette configuration devrait être plus intuitive.

13voto

Tobu Points 10101

À partir de CDT 8.3 ( disponible comme mise à jour de Kepler ), il y a une nouvelle option de dialecte dans les paramètres de construction :

http://wiki.eclipse.org/CDT/User/NewIn83#Build

0 votes

C'est vraiment génial !

6voto

LandKingdom Points 21

J'utilise Eclipse Kepler et pour résoudre ce problème, j'ai fait ceci :

1 - Clic droit sur le projet >> Propriétés >> C/C++ Build : : Settings

2 - Je suis allé dans GCC G++ Compiler >> Divers >> Autres drapeaux

J'ai ensuite ajouté -std=c++11 cliquez sur appliquer et ok

Cela a réglé mon problème !

J'espère que cela vous aidera !

0 votes

C'est la meilleure réponse pour Plate-forme Eclipse, Version : 4.3.1 - Je ne sais pas ce qu'est Kepler/Juno !

0 votes

Eclipse Kepler est Eclipse Version 4.3.X

4voto

David Karla Points 11

J'utilise eclipse indigo et cdt 8.0.2 ici. J'ai suivi tous les guides, mais il était encore nécessaire de définir la définition du préprocesseur à la main pour trouver des choses comme std::unique_ptr. Le fichier include "memory" vérifie cela. Définissez __cplusplus à 201103L dans l'onglet "Symboles" sous "Chemins et Symboles" dans "C++ Général" dans les propriétés du projet.

0 votes

Oui, cela fonctionne pour les migrations à partir d'anciens projets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X