Comment activer la prise en charge C ++ 11 / C ++ 0x dans Eclipse CDT?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Voici un exemple de code C ++ 11:

auto text = std::unique_ptr(new char[len]); 

L’éditeur Eclipse se plaint de:

 Function 'unique_ptr' could not be resolved 

La compilation de Makefile fonctionne bien. Comment faire pour que Eclipse cesse de se plaindre de ces erreurs?

J’ai trouvé cet article sur le forum Eclipse, je viens de suivre ces étapes et ça marche pour moi. J’utilise Eclipse Indigo 20110615-0604 sous Windows avec une configuration Cygwin.

  • Faire un nouveau projet C ++
  • Options par défaut pour tout
  • Une fois créé, cliquez avec le bouton droit sur le projet et allez dans “Propriétés”
  • C / C ++ Build -> Paramètres -> Paramètres de l’outil -> Compilateur GCC C ++ -> Divers -> Autres indicateurs. Mettez -std=c++0x (ou pour la version plus récente du compilateur -std=c++11 à la fin. … au lieu de GCC C ++ Comstackr j’ai aussi un compilateur Cygwin
  • C / C ++ Général -> Chemins et symboles -> Symboles -> GNU C ++. Cliquez sur “Ajouter …” et collez __GXX_EXPERIMENTAL_CXX0X__ (veillez à append et à append deux traits de soulignement) dans “Nom” et laissez “Valeur” vide.
  • Appuyez sur Appliquer, faites ce qu’il vous demande de faire, puis appuyez sur OK.

Vous en trouverez une description dans la FAQ Eclipse: FAQ sur les fonctionnalités d’ Eclipse / C ++ 11 .

Réglage de l’image Eclipse

Instruction pour Eclipse CDT 4.4 Luna et 4.5 Mars

Tout d’abord, avant de créer un projet, configurez l’parsingur de syntaxe Eclipse:

Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Comstackr Settings

dans la zone de texte intitulée Command to get comstackr specs append -std=c++11

Maintenant, vous pouvez créer un projet, la configuration dépend du type de projet que vous avez créé:

Pour le projet créé en tant que: Fichier -> Nouveau -> Projet -> C / C ++ -> Projet C ++

Faites un clic droit sur le projet créé et ouvrez-le

Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC C++ Comstackr -> Dialect

Placez -std=c++11 dans la zone de texte intitulée other dialect flags ou sélectionnez ISO C++11 dans la liste déroulante Language standard .

Pour le projet CMake

Générer des fichiers de projet eclipse (dans votre projet)

 mkdir build cd build cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug .. 

Importez ensuite le répertoire généré pour l’éclipse en tant que projet eclipse standard. Faites un clic droit sur le projet et ouvrez-le

Properties -> C/C++ General -> Preprocessor Include Paths, Marcos etc. -> Providers

Consortingbuted PathEntry Containers CDT GCC Build-in Comstackr Settings Consortingbuted PathEntry Containers CDT GCC Build-in Comstackr Settings et déplacez-le plus haut que les Consortingbuted PathEntry Containers (c’est important)

Dernière étape commune

recomstackr, régénérer Project -> C/C++ Index et redémarrer Eclipse.

Mise à jour 2016:

A partir de gcc 6 ( changements ), le dialecte C ++ par défaut est C ++ 14. Cela signifie que, à moins que vous ayez explicitement besoin d’un dialecte plus récent ou plus ancien, vous n’avez plus besoin de faire quoi que ce soit avec éclipse.

Pour Luna et Mars

Cette section wiki de la communauté intègre la réponse de Trismegistos;

1. Avant de créer un projet, configurez l’parsingur de syntaxe Eclipse:

Fenêtre -> Préférences -> C / C ++ -> Construire -> Paramètres -> Découverte -> Paramètres du compilateur CDT GCC intégré

dans la zone de texte intitulée Commande pour obtenir les spécifications du compilateur append -std=c++14 2. Créer un projet, la configuration dépend du type de projet que vous avez créé:

Pour le projet créé en tant que: Fichier -> Nouveau -> Projet -> C / C ++ -> Projet C ++

Faites un clic droit sur le projet créé et ouvrez-le

Propriétés -> C / C ++ Build -> Paramètres -> Paramètres d’outil -> Compilateur GCC C ++ -> Dialect

Placez -std=c++14 dans la zone de texte intitulée Autres indicateurs de dialecte ou sélectionnez ISO C ++ 11 dans la liste déroulante Standard de langage.

Il existe maintenant une nouvelle façon de résoudre ce problème sans le hack GXX_EXPERIMENTAL.

Pour les versions les plus récentes : (Actuellement Juno et Kepler Luna ):

Sous les versions plus récentes de Juno, les parameters se trouvent dans Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Comstackr Settings () .

Anciennes versions 2012/2013:

  1. Sous C / C ++ Build (aux parameters du projet), recherchez le chemin d’ inclusion du préprocesseur et accédez à l’ onglet Providers . Désélectionnez tout sauf les parameters du compilateur intégré CDT GCC. Puis défaites les parameters de partage…. Ajoutez l’option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur.

  2. Aller aux chemins et aux symboles. Sous Symboles, cliquez sur Restaurer les parameters par défaut , puis appliquez.


Remarques:

Eclipse est pointilleux sur le fait de bash appliquer, vous devez le faire chaque fois que vous quittez un onglet de parameters.

[Auto-promotion]: J’ai écrit mes propres instructions plus détaillées en fonction de ce qui précède. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Merci à l’utilisateur Nobody à https://stackoverflow.com/a/13635080/1149664

Pour la dernière version (Juno) eclipse, voici ce qui a fonctionné pour moi, pas besoin de déclarer __GXX_EXPERIMENTAL_CXX0X__ sur moi-même. Cela fonctionne pour l’indexeur CDT et comme paramètre pour le compilateur:

“votre nom de projet” -> clic droit -> propriétés:

C / C ++ General -> Préprocesseur Inclure les chemins, les macros, etc. -> passer à l’onglet nommé “Fournisseurs”:

  • pour “Configuration”, sélectionnez “Libérer” (et ensuite “Déboguer”)

  • Désactivez tous les fournisseurs et sélectionnez simplement “Paramètres du compilateur intégré CDT GCC”

  • désélectionnez “Partager les entrées de réglage entre les projets (fournisseur global)”

  • dans la “Commande pour obtenir les spécifications du compilateur:” ajoutez “-std = c ++ 11” sans les guillemets (peut également fonctionner avec des guillemets)

  • appuyez sur Appliquer et fermez les options

  • reconstruire l’index

Maintenant, tous les éléments liés à c ++ 11 doivent être résolus correctement par l’indexeur.

win7 x64, dernière éclipse officielle avec cdt mingw-w64 gcc 4.7.2 du projet mingwbuilds sur sourceforge

J’ai eu le même problème sur mon Eclipse Juno. Ces étapes ont résolu le problème:

  • Allez dans Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .
  • Ajoutez le symbole: __cplusplus avec la valeur 201103L

Pour Eclipse CDT Kepler, ce qui a fonctionné pour me débarrasser du symbole std::thread non résolu est:

  1. Allez dans Preferences-> C / C ++ -> Build-> Settings

  2. Sélectionnez l’onglet Découverte

  3. Sélectionner les parameters du compilateur intégré CDT GCC [Partagé]

  4. Ajoutez le champ -std = c ++ 11 à la “Commande pour obtenir les spécifications du compilateur”, par exemple:

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

  1. Ok et reconstruire Index pour le projet.

L’ajout de -std=c++11 aux Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Comstackr->Miscellaneous->Other projet Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Comstackr->Miscellaneous->Other indicateurs ne suffisait pas pour Kepler, mais cela suffisait pour les anciennes versions telles que comme Helios.

Je ne peux pas encore commenter alors j’écris ma propre réponse:

Il est lié à __GXX_EXPERIMENTAL_CXX0X__ et est valable pour Eclipse Juno et CDT 8.x.

Certaines parties de cette réponse sont déjà couvertes par d’autres réponses, mais je veux qu’elles soient cohérentes.

Pour permettre la construction en utilisant stdc ++ 11, il faut append un indicateur spécifique pour le compilateur. Vous pouvez le faire via les propriétés du projet. Pour modifier les propriétés de projet RMB et Project properties ou ALT + ENTER . Puis C / C ++ Build -> Paramètres -> Paramètres de l’outil -> Compilateur C ++ GCC -> Divers -> Autres indicateurs. Mettez -std = c ++ 11 à la fin de la ligne, pour GCC cela ressemblera à: -c -fmessage-length=0 -std=c++11 . En ajoutant -stdc ++ 11, le compilateur d’indicateurs (GCC) déclarera __GXX_EXPERIMENTAL_CXX0X__ par lui-même.

À ce stade, vous pouvez construire un projet en utilisant toutes les qualités de C ++ 11.

Le problème est que Eclipse a son propre parsingur pour vérifier les erreurs – c’est pourquoi vous obtenez toujours toutes les erreurs désagréables dans l’éditeur Eclipse, alors que vous pouvez en même temps créer et exécuter le projet sans aucune erreur. Il existe un moyen de résoudre ce problème en déclarant explicitement l’indicateur __GXX_EXPERIMENTAL_CXX0X__ pour le projet, on peut le faire (comme l’a dit Carsten Greiner): Général C / C ++ -> Chemins et symboles -> Symboles -> GNU C ++. Cliquez sur “Ajouter …” et après __GXX_EXPERIMENTAL_CXX0X__ (assurez-vous d’append et d’append deux traits de soulignement) dans “Nom” et laissez “Valeur” vide. Et voici la partie supplémentaire que je voulais couvrir en commentant la première réponse: allez à: C / C ++ General -> Préprocesseur Inclure les macros de chemin, etc. -> Fournisseurs, et sélectionnez CDT Managed Build Setting Ensortinges puis cliquez sur APPLIQUER et revenez à Onglet Entrées, sous GNU C ++, il devrait y avoir maintenant des entrées de parameters de __GXX_EXPERIMENTAL_CXX0X__ gérées par CDT. Vérifiez si l’intérieur est défini __GXX_EXPERIMENTAL_CXX0X__ si c’est le cas -> APPLY et reconstruisez l’index.

J’ai aussi eu plusieurs problèmes (Ubuntu 13.04 64 bits, g ++ – 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Beaucoup de choses sont mentionnées ci-dessus, désolé de les répéter, mais en plus j’ai eu des problèmes pour utiliser

 std::thread 

dans le cadre de c ++ 11 (l’ajout de -pthread pour l’éditeur de liens résout ce problème). Quoi qu’il en soit, finalement ces réglages ont bien fonctionné:

Projet -> Propriétés -> C / C ++ Build -> Paramètres -> Divers. Ajouter le

 -std=c++11 

flag pour les compilateurs GCC et G ++. Cliquez sur Appliquer.

Pour l’éditeur de liens, même fenêtre, divers drapeaux Linker ont ajouté le

 -pthread 

drapeau. Paramètres de la bibliothèque partagée, nom de l’object partagé, ajoutez le

 -Wl,--no-as-needed 

drapeau aussi. Cliquez sur Appliquer.

C / C ++ Général -> Chemins et symboles -> Symboles TAB, GNU C ++ sélectionné, Ajouter le

 __GXX_EXPERIMENTAL_CXX0X__ 

(aucune valeur)

drapeau. Cliquez sur Appliquer.

C / C ++ General -> Tracés d’inclusion du préprocesseur .. -> Onglet Fournisseurs: vérifier

Paramètres de compilateur intégrés CDT GCC

et pour “Commande pour obtenir les spécifications du compilateur”, ajoutez le

 -std=c++11 

drapeau. Décochez Partager. Cliquez sur Appliquer.

CDT gère les entrées des parameters de construction, vérifiez aussi. Décochez les deux autres. Cliquez sur Appliquer.

Pour revenir à l’onglet Entrées, GNU C ++ CDT gère les entrées des parameters de construction, vous devriez maintenant voir vos ajouts

 __GXX_EXPERIMENTAL_CXX0X__ 

entrée.

C’est tout. Lors du codage, en tapant

 std:: 

peut maintenant compléter automatiquement la classe de thread par exemple, les builds devraient fonctionner correctement et il ne devrait y avoir aucun

 std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted 

lors de l’exécution.

Je ne sais pas si ce n’est que moi, la solution la mieux classée ne fonctionne pas pour moi, ma version eclipse est juste une plate-forme eclipse normale installée avec sudo apt-get install eclipse dans Ubuntu Mais j’ai trouvé une solution de la solution la mieux classée et de la seconde, ce que j’ai fait pour le faire fonctionner est décrit ci-dessous (notez que les autres étapes comme la création d’un projet C ++ etc. sont ignorées pour des raisons de simplicité)

Une fois que vous avez créé le projet C ++

(1) C / C ++ Général -> Chemins et symboles -> Symboles -> GNU C ++. Cliquez sur “Ajouter …” et collez GXX_EXPERIMENTAL_CXX0X (assurez-vous d’append et d’append deux traits de soulignement) dans “Nom” et laissez “Valeur” vide.

(2) Sous C / C ++ Build (aux parameters du projet), recherchez le chemin d’inclusion du préprocesseur et accédez à l’onglet Providers. Désélectionnez tout sauf les parameters du compilateur intégré CDT GCC. Puis défaites les parameters de partage…. Ajoutez l’option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur

Après avoir effectué les étapes 2 et 2 ci-dessus, cela fonctionne, l’éclipse est capable de résoudre l’unique_ptr, je ne sais pas pourquoi cette solution fonctionne, j’espère qu’elle peut aider les gens.

Pour moi, sur Eclipse Neon, j’ai suivi la réponse de Trismegistos ci-dessus , ENCORE j’ai également ajouté une étape supplémentaire:

  • Allez dans le projet -> Propriétés -> Général C ++ -> Chemins d’inclusion du préprocesseur, macros etc. -> Fournisseurs -> Paramètres du compilateur intégré CDC Cross GCC, ajoutez le drapeau “-std = c ++ 11”

Hit applique et OK.

À votre santé,

Gars.

  • faites un clic droit sur le projet et allez dans “Propriétés”
  • C / C ++ Build -> Paramètres -> Paramètres de l’outil -> Compilateur GCC C ++ -> Divers -> Autres indicateurs. Mettez -lm à la fin de la zone de texte des autres indicateurs et OK.

Ni le hack ni la version plus propre ne fonctionnent pour Indigo. Le hack est ignoré et les options de configuration requirejses sont manquantes. Pour aucune raison apparente, la construction a commencé à fonctionner après ne pas avoir fonctionné et ne fournissant aucune raison utile. Au moins depuis la ligne de commande, j’obtiens des résultats reproductibles.

Pour obtenir le support de C ++ 14 dans Eclipse Luna, vous pouvez effectuer les étapes suivantes:

  • Dans C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Comstackr Settings , ajoutez “-std = c ++ 14”
  • Dans C++ Build -> Settings -> Cross G++ Comstackr -> Miscellaneous , ajoutez “-std = c ++ 14”

Réindexez votre projet et redémarrez éventuellement Eclipse. Cela devrait fonctionner comme prévu.

Eclipse C / C ++ ne reconnaît pas le symbole std::unique_ptr même si vous avez inclus l’en-tête de mémoire C ++ 11 dans votre fichier.

En supposant que vous utilisez le compilateur GNU C ++, c’est ce que j’ai fait pour corriger:

Projet -> Propriétés -> Général C / C ++ -> Chemins d’inclusion du préprocesseur -> GNU C ++ -> Entrées des parameters utilisateur CDT

  1. Cliquez sur le bouton “Ajouter …”

  2. Sélectionnez “Macro préprocesseur” dans le menu déroulant

     Name: __cplusplus Value: 201103L 
  3. Appuyez sur Appliquer, puis sur OK pour revenir à votre projet.

  4. Reconstruisez ensuite votre index C ++: Projects -> C / C ++ Index -> Rebuild

Je l’ai résolu de cette façon sur un Mac. J’ai utilisé Homebrew pour installer la dernière version de gcc / g ++. Ils atterrissent dans / usr / local / bin avec des entrées dans / usr / local / include.

J’ai fait un CD dans / usr / local / bin et j’ai créé un lien symbolique de g ++ @ 7 pour ne faire que g ++ car @ bit est agaçant.

Puis je suis allé à MyProject -> Propriétés -> C / C ++ Build -> Paramètres -> GCC C ++ Comstackr et a changé la commande de “g ++” à “/ usr / local / bin / g ++”. Si vous décidez de ne pas créer le lien symbolique, vous pouvez être plus précis.

Faites la même chose pour l’éditeur de liens.

Appliquer et appliquer et fermer Laissez-le reconstruire l’index. Pendant un moment, il a montré un nombre décourageant d’erreurs, mais je pense que c’était en construisant des index. Pendant que je cherchais les erreurs, ils ont tous disparu sans autre action.


Je pense que sans vérifier que vous pouvez également aller dans Eclipse -> Propriétés -> C / C ++ -> Core Build Toolchains et éditer ceux avec des chemins différents, mais je ne suis pas sûr de ce que cela va faire.