Comment activer le support C++11/C++0x dans Eclipse CDT?
Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
ceci est un exemple d'un morceau de code C++11:
auto text = std::unique_ptr<char[]>(new char[len]);
L'Éclipse de l'éditeur se plaint:
Function 'unique_ptr' could not be resolved
la compilation Makefile fonctionne très bien. Comment faire pour que Eclipse cesse de se plaindre de ce genre d'erreurs?
15 réponses
- faire un nouveau projet C++
- options par défaut pour tout
- une fois créé, faites un clic droit sur le projet et allez à "Propriétés"
- C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ -> Divers - > Autres Drapeaux. Mettez
-std=c++0x
(ou pour la nouvelle version de compilateur-std=c++11
à la fin . ... au lieu de GCC C++ Compiler j'ai aussi Cygwin compiler - C/C++ Général -> Chemins et des Symboles -Symboles > - > C++de GNU. Cliquez Sur " Ajouter..."et coller
__GXX_EXPERIMENTAL_CXX0X__
(s'assurer d'ajouter et de préparer deux caractères soulignés) dans" nom "et laisser" valeur " en blanc. - cliquez sur Appliquer, faire tout ce qu'il vous demande de le faire, puis appuyez sur OK.
Il y a une description de cela dans la FAQ Eclipse maintenant aussi bien: Eclipse FAQ/C++11 traits .
Instruction For Eclipse CDT 4.4 Luna and 4.5 Mars
d'abord, avant de créer le projet, configurer L'analyseur de syntaxe Eclipse:
Window
-> Preferences
-> C/C++
-> Build
-> Settings
-> Discovery
-> CDT GCC Build-in Compiler Settings
dans la zone de texte intitulée Command to get compiler specs
ajouter -std=c++11
Maintenant vous pouvez créer projet, configuration dépend du type de projet que vous avez créé:
Pour projet créé: Fichier -> Nouveau -> Projet -> C/C++ -> C++ Projet
clic droit sur le projet créé et ouvert
Properties
-> C/C++ Build
-> Settings
-> Tool Settings
-> GCC C++ Compiler
-> Dialect
mettez -std=c++11
dans la zone de texte intitulée other dialect flags
ou sélectionnez ISO C++11
à partir du Language standard
baisse.
Pour CMake projet
générer des fichiers de projet eclipse (à l'intérieur de votre projet)
mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
importe ensuite le répertoire généré pour eclipse en tant que standard eclipse project. Clic droit projet et ouvrir
Properties
-> C/C++ General
-> Preprocessor Include Paths, Marcos etc.
-> Providers
activer CDT GCC Build-in Compiler Settings
et le déplacer plus haut que Contributed PathEntry Containers
(ceci est important)
Dernière Étape Commune
recompiler, régénérer Project
-> C/C++ Index
et de redémarrer Eclipse.
mise à jour 2016:
à partir de gcc 6 ( change ), le dialecte C++ par défaut est C++14. Cela signifie qu'à moins que vous ayez explicitement besoin d'un dialecte plus récent ou plus ancien que than, vous n'avez plus besoin de faire quoi que ce soit avec eclipse.
pour Luna et Mars
cette section wiki communautaire incorpore la réponse de Trismegistos;
1. Avant de créer le projet, configurer L'analyseur de syntaxe Eclipse:
Window -> Preferences -> C/C++ -> Build -> Paramètres -> Découverte> CDT GCC Construire-dans les Paramètres du Compilateur
dans la zone de texte intitulée Commande pour obtenir compilateur spécifications ajouter -std=c++14
2. Créer un projet, la configuration dépend du type de projet que vous avez créé:
pour projet créé comme: Fichier - > Nouveau - > projet -> C/C++ -> C++ Projet
clic droit sur le projet créé et ouvert
Propriétés -> C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ - > Dialecte
mettez -std=c++14
dans la zone de texte intitulée autres drapeaux de dialecte ou sélectionnez ISO C++11 à partir de la liste déroulante de la norme linguistique.
il y a maintenant une nouvelle façon de résoudre cela sans le piratage GXX_EXPERIMENTAL.
pour la plupart versions récentes : (actuellement Juno et Kepler Luna ):
sous les nouvelles versions de Juno les paramètres sont situés à Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.
anciennes versions 2012/2013:
-
sous C / C++ Build (at project settings), trouver le préprocesseur inclure chemin et aller à la Fournisseurs Onglet . Désélectionnez tout sauf les paramètres de compilation CDT GCC. Puis décompressez les entrées de paramètres de partage ... . ajoute l'option-std=C++11 à la zone de texte appelée commande pour obtenir les spécifications du compilateur.
-
aller aux chemins et symboles. Sous les symboles, cliquez sur restaurer par défaut , puis appliquez.
Notes:
Eclipse est difficile au sujet de frapper appliquer, vous devez le faire chaque fois que vous laissez un onglet Paramètres.
[auto-promotion]: j'ai écrit mes propres instructions plus détaillées basées sur 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 (Juno) eclipse cdt la suite travaillé 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 Include Paths,Macros etc. - >passez à L'onglet "Fournisseurs":
-
pour" Configuration "sélectionnez" Release " (et ensuite "debug")
-
désactiver tous les fournisseurs et sélectionner "CDT GCC Built-in Compiler Settings"
-
décocher la case "Partager réglage des entrées entre les projets (fournisseur mondial)"
-
dans la "commande pour obtenir les spécifications du compilateur: "ajouter" - std=c++11 " sans les guillemets (peut fonctionner avec des guillemets aussi)
-
cliquez sur appliquer et fermer la options
-
"reconstruire l'indice
maintenant toutes les choses liées au c++11 doivent être résolues 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 mesures ont résolu le problème:
- passer à
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
. - ajouter le symbole: _ _ _ cplusplus avec la valeur 201103L "151980920
pour Eclipse CDT Kepler ce qui a fonctionné pour moi de se débarrasser de std::thread
symbole non résolu est:
-
Allez dans Préférences->C/C++->Build->Paramètres
-
sélectionnez L'onglet "Découverte
-
Sélectionnez CDT GCC Compilateur Intégré les Paramètres de [Partagé]
-
ajouter le-std=c++11 à la commande" pour obtenir les spécifications du compilateur:" domaine tel que:
${COMMAND} -E-P-v-dD-std=c++11 ${INPUTS}
- Ok et Reconstruire l'Index pour le projet.
ajout de -std=c++11
au projet Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Les drapeaux ne suffisaient pas pour Kepler, mais pour les versions plus anciennes comme Helios.
Je ne peux pas encore commenter donc j'écris ma propre réponse:
c'est lié à __GXX_EXPERIMENTAL_CXX0X__
et c'est valable pour Eclipse Juno et CDT 8.x.
Certaines parties de cette réponse sont déjà abordés dans d'autres réponses, mais je veux qu'il soit cohérent.
pour qu'il soit possible de construire en utilisant stdc++11, Il faut ajouter un drapeau spécifique pour le compilateur. Vous pouvez le faire via les propriétés du projet. Modifier les propriétés du projet RMB
et Project properties
ou ALT + ENTER
. Puis C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ - > Divers -> d'Autres Drapeaux. Put-std=c++11 à la fin de la ligne, pour GCC il ressemblera à quelque chose comme: -c -fmessage-length=0 -std=c++11
. En ajoutant -stdc++11 drapeau compilateur (GCC) déclare __GXX_EXPERIMENTAL_CXX0X__
par lui-même.
à ce point vous pouvez construire le projet en utilisant toute la bonté de C++11.
le problème est que Eclipse a son propre analyseur pour vérifier les erreurs - qui est pourquoi vous obtenez toujours toutes les mauvaises erreurs dans L'éditeur Eclipse, alors qu'en même temps vous pouvez construire et exécuter le projet sans aucune. Il ya un moyen de résoudre ce problème en déclarant explicitement __GXX_EXPERIMENTAL_CXX0X__
drapeau pour le projet, on peut le faire (tout comme Carsten Greiner dit):
C / C++ général - > chemins et Symboles - > Symboles - > GNU C++. Cliquez Sur " Ajouter..."et après __GXX_EXPERIMENTAL_CXX0X__
(assurez-vous d'ajouter et de préparer deux caractères soulignés) dans" nom "et laissez" valeur " en blanc.
Et maintenant, c'est la partie que je voulais couverture en commentaire à la première réponse, aller à:
C / C++ General - > préprocesseur Include Path Macros etc. -> Providers, et sélectionnez CDT Managed Build Setting Entries
puis cliquez sur APPLY et retournez à L'onglet Entries, sous GNU C++ il devrait y avoir maintenant des entrées de configuration de construction gérées par CDT vérifiez si à l'intérieur il y a défini __GXX_EXPERIMENTAL_CXX0X__
si c'est - > APPLY and rebuild index vous devriez être bien à ce point.
j'ai 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 répéter ces, mais en plus j'ai eu des problèmes en utilisant
std::thread
dans le cadre de c++11 (ajouter-pthread pour le linker résout ce problème). Quoi qu'il en soit, ces réglages ont finalement bien fonctionné:
Projet -> Propriétés -> C/C++ Build -> Paramètres -> Divers. Ajouter le
-std=c++11
Drapeau pour les compilateurs GCC et G++. Cliquez Sur Appliquer.
pour le linker, même fenêtre, divers, drapeaux de Linker, a ajouté le
-pthread
Drapeau . Paramètres de bibliothèque partagés, nom D'objet partagé, ajouter le
-Wl,--no-as-needed
Drapeau aussi. Cliquez Sur Appliquer.
C/C++ Général -> Chemins et des symboles -> ONGLET Symboles, GNU C++ sélectionné, Ajouter
__GXX_EXPERIMENTAL_CXX0X__
(aucune valeur)
Drapeau. Cliquez Sur Appliquer.
C / C++ General - > préprocesseur Include paths.. - >Onglet fournisseurs: cochez
CDT GCC Compilateur intégré les Paramètres
et pour "commande pour obtenir les spécifications du compilateur", ajouter le
-std=c++11
Drapeau . Décochez L'Option Partager. Cliquez Sur Appliquer.
CDT Managages Construire Réglage des Entrées d'effectuer cette vérification. Décochez les deux autres. Cliquez Sur Appliquer.
Pour revenir à L'onglet Entrées, GNU C++ CDT Managages Build Setting Entries, vous devriez maintenant Voir votre ajouté
__GXX_EXPERIMENTAL_CXX0X__
entrée.
C'est ça. Lors du codage, dactylographier
std::
peut maintenant auto-compléter la classe de thread par exemple, les constructions devraient fonctionner correctement et il ne devrait pas y avoir de
std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted
à l'exécution.
Je ne sais pas si c'est seulement moi, la solution la mieux classée ne fonctionne pas pour moi, ma version eclipse est juste plate-forme eclipse normale installé en utilisant sudo apt-get install eclipse dans Ubuntu Mais j'ai trouvé une solution qui adopte une méthode à la fois de la solution la mieux classée et la seconde, ce que j'ai fait pour la faire fonctionner est décrit comme ci-dessous (notez que les autres étapes comme la création d'un projet C++, etc. est ignoré pour la simplicité)
une Fois que vous avez créé le C++ project
(1) C/C++ Général -> Chemins et des Symboles -Symboles > - > C++de GNU. Cliquez Sur " Ajouter..."et coller GXX_EXPERIMENTAL_CXX0X (s'assurer d'ajouter et de pré-ajouter deux caractères soulignés) dans" nom "et laisser" valeur " en blanc.
(2) sous C/C++ Build (at project settings), trouvez le chemin Include du préprocesseur et allez à L'onglet Providers. Désélectionnez tout sauf les paramètres de compilation CDT GCC. Puis décompressez les entrées de paramètres de partage ... . Ajouter l' option-std=C++11 dans la zone de texte appelée commande pour obtenir les spécifications du compilateur
après exécuté au-dessus de 2 et 2 pas seulement, il fonctionne, l'eclipse est capable de résoudre le unique_ptr, Je ne sais pas pourquoi cette solution fonctionne, espérer qu'il peut aider les gens.
Pour moi Eclipse Néon j'ai suivi Trismegistos réponse ci-dessus , MAIS j'ai aussi ajouté une étape supplémentaire:
- Aller à projet --> Propriétés --> C++ Général --> Préprocesseur Inclure des chemins d'accès,les Macros, etc. --> Les fournisseurs de services --> CDT de la Croix-GCC Compilateur Intégré les Paramètres, ajouter le drapeau "-std=c++11"
cliquez sur appliquer et OK.
Cheers,
Guy.
- faites un clic droit sur le projet et allez à "Propriétés"
- C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ - > Divers -> d'Autres Drapeaux. Mettez-lm à la fin de la zone de texte des autres drapeaux et OK.
ni le hack ni la version plus propre ne fonctionnent pour Indigo. Le hack est ignoré, et les options de configuration nécessaires sont manquantes. Sans raison apparente, build a commencé à fonctionner après ne pas avoir fonctionné et n'a fourni 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 faire ces étapes:
- dans
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
, ajouter "- std=c++14" - dans
C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
, ajouter "- std=c++14"
Réindexer votre projet et éventuellement redémarrer Eclipse. Il 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 -> C/C++ Général -> Préprocesseur Inclure des Chemins d'accès -> GNU C++ -> CDT de l'Utilisateur Réglage des Entrées
-
cliquez sur le bouton" Ajouter..."bouton
-
sélectionnez "Macro préprocesseur" dans le menu déroulant
Name: __cplusplus Value: 201103L
-
cliquez sur Appliquer, puis sur OK pour revenir à votre projet
-
Puis reconstruire vous C++ indice: les Projets -> C/C++ Index -> Reconstruire
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 les inclut dans /usr/local/include.
J'ai fait un CD dans /usr/local/bin et j'ai fait un lien symbolique de g++@7 qui que ce soit à G++ parce que @ bit est ennuyeux.
puis je suis allé sur MyProject - > Properties - > C/C++ Build - > Settings - > GCC C++ Compiler et j'ai changé la commande de "++ G" en "/usr/local/bin/g++". Si vous décidez de ne pas le lien symbolique, vous pouvez être plus précis.
faites la même chose pour le linker.
appliquer et appliquer et fermer. Qu'il reconstruise l'index. Pendant un certain temps, il a montré un nombre impressionnant d'erreurs, mais je pense que c'était lors de la construction des index. Pendant que je cherchais les erreurs, elles ont toutes disparu sans suite.
je pense que sans vérifier que vous pourriez aussi aller dans Eclipse -> Properties - > 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.