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


210

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Voici un exemple d'un morceau de code C ++ 11:

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

L'éditeur Eclipse se plaint de:

Function 'unique_ptr' could not be resolved

La compilation Makefile fonctionne très bien. Comment empêcher Eclipse de se plaindre de ce genre d'erreurs?


12
À tout le moins, cela devrait êtrestd::unique_ptr<char[]>
Cubbi

Pas sûr que ce soit correct - char [] est convertible en char * et unique_ptr <char> est un pointeur vers char, comme char *
Nick

1
Ne serait pas unique_ptr<char>appel delete, ce qui est faux car il a été créé avec new[]?
Dietrich Epp du

6
@ Nick: Non, il a raison. La façon dont vous l'avez écrit provoquera deletel'appel, lorsque vous en aurez besoin delete[] . Le unique_ptr<char>suppose qu'il obtient un pointeur, qui est supprimé avec delete. unique_ptr<char[]>attend un tableau, qui est supprimé avec delete[]correctement.
Nicol Bolas

Réponses:


224

J'ai trouvé cet article sur le forum Eclipse, j'ai simplement suivi ces étapes et cela fonctionne pour moi. J'utilise Eclipse Indigo 20110615-0604 sous Windows avec une configuration Cygwin.

  • Créer un nouveau projet C ++
  • Options par défaut pour tout
  • Une fois créé, faites un clic droit sur le projet et allez dans "Propriétés"
  • C / C ++ Build -> Paramètres -> Paramètres de l'outil -> GCC C ++ Compiler -> Divers -> Autres indicateurs. Mettez -std=c++0x(ou pour une version plus récente du compilateur -std=c++11à la fin. ... au lieu du compilateur C ++ GCC, j'ai aussi le compilateur Cygwin
  • C / C ++ Général -> Chemins et symboles -> Symboles -> GNU C ++. Cliquez sur "Ajouter ..." et collez __GXX_EXPERIMENTAL_CXX0X__(assurez-vous d'ajouter et de préfixer 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.

Il y a maintenant une description de cela dans la FAQ Eclipse : Fonctionnalités Eclipse FAQ / C ++ 11 .

Réglage de l'image Eclipse


2
Oui, ça a marché! Mais, assurez-vous de préfixer et d'ajouter deux traits de soulignement à GXX_EXPERIMENTAL_CXX0X - J'accepterai en attendant
Nick

5
Cela a-t-il supprimé les erreurs de l'éditeur parasites? Je n'ai aucun problème avec la compilation, et les nouveaux types std sont reconnus, mais je ne peux pas me débarrasser des erreurs de syntaxe de l'éditeur pour la plage basée sur les boucles et les références rvalue &&.
juanchopanza

7
La question de suivi naturelle devient maintenant: pouvons-nous optimiser notre flux de travail en enregistrant ces paramètres de projet C ++ spécifiques dans un nouveau modèle de projet Eclipse, dit "Projet C ++ 11"?
Nordlöw

38
Remarque: pour tous ceux qui recherchent la réponse pour Juno, cela ne fonctionne pas .
Christopher

4
Pour kepler / juno, la solution se trouve dans cette réponse . Il est publié dans la modification de la réponse de Johan Lundberg ci-dessous, mais je le note ici également, pour rendre la réponse acceptée plus complète.
Lumière inutilisable du

150

Instruction pour Eclipse CDT 4.4 Luna et 4.5 Mars

Tout d'abord, avant de créer un projet, configurez l'analyseur syntaxique 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 specsajouter-std=c++11

Vous pouvez maintenant 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

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

Mettez -std=c++11dans la zone de texte intitulée other dialect flagsou sélectionnez ISO C++11dans le Language standardmenu déroulant.

Pour le projet CMake

Générez 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 ..

Importez ensuite le répertoire généré dans eclipse en tant que projet d'éclipse standard. Cliquez avec le bouton droit sur le projet et ouvrez

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

l'activer CDT GCC Build-in Compiler Settingset le déplacer plus haut que Contributed PathEntry Containers(c'est important)

Dernière étape commune

recompiler, régénérer Project-> C/C++ Indexet redémarrer Eclipse.


1
Fonctionne parfaitement même sans avoir besoin d'un redémarrage éclipse. Je vous remercie.
prasannak

Je vous remercie. Aucune autre réponse n'a fonctionné pour moi sur Luna aussi.
Mohamed El-Nakib

Fonctionne toujours sur Mars. Plus qu'une excellente réponse! Si seulement je pouvais voter cette réponse deux fois!
Mohamed El-Nakib

Merci! C'est la réponse la plus utile pour le problème que j'ai rencontré (4.5)
AturSams

2
Pour Eclipse Neon.3, avec un projet Makefile C ++, le paramètre de projet à ajouter -std=c++11était Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:. Ajoutez votre -std=c++11à cela. Je l'avais défini dans les paramètres globaux de l'espace de travail comme suggérant, mais il n'a pas été copié à l'emplacement que je décris ci-dessus lorsque j'ai créé un nouveau Makefileprojet.
BeeOnRope

112

Mise à jour 2016:

Depuis gcc 6 ( modifications ), le dialecte C ++ par défaut est C ++ 14. Cela signifie qu'à moins d'avoir explicitement besoin d'un dialecte plus récent ou plus ancien que, 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 un projet, configurez l'analyseur syntaxique Eclipse:

Fenêtre -> Préférences -> C / C ++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings

dans la zone de texte intitulée Commande pour obtenir l'ajout des spécifications du compilateur -std=c++14 2. Créez 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

Propriétés -> C / C ++ Build -> Paramètres -> Paramètres de l'outil -> GCC C ++ Compiler -> Dialect

Mettez -std=c++14dans la zone de texte intitulée autres drapeaux dialectes ou sélectionnez ISO C ++ 11 dans la liste déroulante Standard de langue.

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 paramètres se trouvent à Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Versions antérieures 2012/2013:

  1. Sous C / C ++ Build (dans les paramètres du projet), recherchez le chemin d' inclusion du préprocesseur et accédez à l' onglet Fournisseurs . Désélectionnez tout sauf les paramètres du compilateur intégré CDT GCC. Désélectionnez ensuite Partager les entrées des paramètres…. Ajoutez l'option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur.

  2. Allez aux chemins et aux symboles. Sous Symboles, cliquez sur restaurer les valeurs par défaut , puis appliquez.


Remarques:

Eclipse est difficile à appliquer, vous devez le faire chaque fois que vous quittez un onglet de 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 Nobodyde https://stackoverflow.com/a/13635080/1149664


3
Merci mais cela ne m'a pas aidé à résoudre les références c ++ 11. Le programme se compile correctement, mais eclipse ne peut pas les résoudre. Lorsque je vérifie "tableau", #ifndef __GXX_EXPERIMENTAL_CXX0X__renvoie true et le code ci-dessous n'est pas analysé. Lorsque j'ajoute __GXX_EXPERIMENTAL_CXX0X__aux symboles du projet, le tableau est résolu mais les références de mon projet sont gâchées. Quel pourrait être le problème ici?
Halil Kaskavalci

1
Je pense que c'est un bug. Je l'ai reproduit comme ceci: Ouvrir un nouveau projet. Activez les fonctionnalités c ++ 11. Ajoutez une classe aléatoire avec une variable publique. Créez un vecteur de cette classe aléatoire. Obtenez l'itérateur. Essayez d'accéder à la variable publique. Soit mon espace de travail est corrompu, soit il y a un bogue dans Eclipse qui ne peut pas analyser cela.
Halil Kaskavalci,

1
@HalilKaskavalci J'ai trouvé ce même bug. Si je définis l'éditeur pour c ++ 11, les itérateurs ne peuvent pas résoudre. Si je ne le fais pas, std :: unique_ptr ne peut pas résoudre. Vraiment ennuyeux, car j'utilise les deux.
Kian

1
@Kian J'ai signalé le bogue. bugs.eclipse.org/bugs/show_bug.cgi?id=397027 . C'est assez ennuyeux et j'ai commencé à utiliser les bibliothèques boost, elles ne produisent pas l'erreur :)
Halil Kaskavalci

1
travaille pour moi! Je vous remercie! (l'a fait par référence) J'ai ajouté -std = c ++ 11 aux fournisseurs et restauré les valeurs par défaut des symboles. Je pense que restaurer la valeur par défaut des symboles me sauve. Maintenant unique_ptr se résout.
Denis Zaikin

20

Pour le dernier cdt (Juno) eclipse, les éléments suivants ont fonctionné pour moi, pas besoin de __GXX_EXPERIMENTAL_CXX0X__me déclarer moi-même. Cela fonctionne pour l'indexeur CDT et comme paramètre pour le compilateur:

"le nom de votre projet" -> clic droit -> propriétés:

C / C ++ General -> Preprocessor Include Paths, Macros etc. -> passez à l'onglet nommé "Providers":

  • pour "Configuration" sélectionnez "Release" (et ensuite "debug")

  • désactivez tous les fournisseurs et sélectionnez simplement "Paramètres du compilateur intégré CDT GCC"

  • décochez "Partager les entrées de paramètres entre les projets (fournisseur global)"

  • dans la "Commande pour obtenir les spécifications du compilateur:" ajouter "-std = c ++ 11" sans les guillemets (peut aussi fonctionner avec des guillemets)

  • appuyez sur appliquer et fermer les options

  • reconstruire l'index

Maintenant, toutes les choses liées à 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


toujours les mêmes avertissements de l'éditeur erronés, car dans le type 'std :: thread' n'a pas pu être résolu même s'il compile et exécute OK
Scott Stensland

2
vous devez compiler une fois avec les nouveaux paramètres, afin que l'analyseur "apprenne" que l'indicateur std = c ++ 11 est défini
Andreas

en fonction de la version du compilateur, il peut être nécessaire d'ajouter -std = c ++ 0x au lieu de -std = c ++ 11 (par exemple debian wheezy)
xmoex

15

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

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

2
Cette réponse devrait être acceptée car elle fonctionne également pour les projets Makefile!
omikron

@ Jerk31, cela ne fonctionne pas pour Eclipse Juno fonctionnant sur Windows (pour moi), je vois toujours ces erreurs inutiles, malgré le binaire qui fonctionne bien. Aidez-moi, s'il vous plaît!!!
Surexchange

Je suis vraiment désolé de ne pas pouvoir vous aider sous Windows. Je n'ai pas la possibilité d'essayer d'exécuter un projet C ++ sur ce système d'exploitation. Je vous souhaite bonne chance et bonne chance!
Jerome

13

Pour Eclipse CDT Kepler, ce qui a fonctionné pour moi pour me débarrasser des std::threadsymboles non résolus est:

  1. Allez dans Préférences-> C / C ++ -> Build-> Paramètres

  2. Sélectionnez l'onglet Découverte

  3. Sélectionnez les paramètres du compilateur intégré CDT GCC [Partagé]

  4. Ajoutez le -std = c ++ 11 au champ "Commande pour obtenir les spécifications du compilateur:" tel que:

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

  1. Ok et reconstruire l'index pour le projet.

L'ajout -std=c++11au projet Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags n'était pas suffisant pour Kepler, mais c'était suffisant pour les anciennes versions telles que Helios.


Pour la version Eclipse: 2019-09 R. Cette solution a fonctionné pour moi, cependant, j'ai passé beaucoup de temps avant cela. Le problème était dans les paramètres du générateur: Projet -> Propriétés -> C / C ++ Build: dans l'onglet 'Paramètres du générateur', choisissez 'Générateur interne' pour 'Type de générateur'.
grekhss

5

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

Il est lié __GXX_EXPERIMENTAL_CXX0X__et valide pour Eclipse Juno et CDT 8.x.

Certaines parties de cette réponse sont déjà couvertes dans d'autres réponses mais je veux qu'elle soit cohérente.

Pour permettre 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. Pour modifier les propriétés du projet RMBet Project propertiesou ALT + ENTER. Puis C / C ++ Build -> Settings -> Tool Settings -> GCC C ++ Compiler -> Miscellaneous -> Other Flags. Mettez std = c ++ 11 à la fin de la ligne, pour GCC il ressemblera à : -c -fmessage-length=0 -std=c++11. En ajoutant -stdc ++ 11, le compilateur de drapeaux (GCC) se déclarera __GXX_EXPERIMENTAL_CXX0X__par lui-même.

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

Le problème est qu'Eclipse a son propre analyseur pour vérifier les erreurs - c'est pourquoi vous obtenez toujours toutes les erreurs désagréables dans l'éditeur Eclipse, tandis qu'en même temps, vous pouvez créer et exécuter un projet sans aucune. Il existe un moyen de résoudre ce problème en déclarant explicitement un __GXX_EXPERIMENTAL_CXX0X__indicateur pour le projet, on peut le faire (comme Carsten Greiner l'a dit): C / C ++ General -> Chemins et symboles -> Symboles -> GNU C ++. Cliquez sur "Ajouter ..." et passé __GXX_EXPERIMENTAL_CXX0X__(assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide. Et maintenant, c'est la partie supplémentaire que je voulais couvrir en commentaire de la première réponse, allez à: Général C / C ++ -> Préprocesseur Inclure les macros de chemin, etc. -> Fournisseurs et sélectionnezCDT Managed Build Setting Entriespuis cliquez sur APPLIQUER et revenez à l'onglet Entrées, sous GNU C ++, il devrait maintenant y avoir des entrées de paramètres de construction gérée CDT vérifier si l'intérieur est défini __GXX_EXPERIMENTAL_CXX0X__si c'est -> APPLIQUER et reconstruire l'index, vous devriez être bien à ce stade.


3

J'ai également 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 avec

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, ces paramètres ont finalement bien fonctionné:

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

-std=c++11

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

Pour l'éditeur de liens, même fenêtre, Divers, Indicateurs de l'éditeur de liens, a ajouté le

-pthread

drapeau. Paramètres de bibliothèque partagée, nom d'objet 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 ++ Général -> Préprocesseur Inclure les chemins .. -> Onglet Fournisseurs: vérifier

Paramètres du compilateur intégré 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 paramètres de génération, vérifiez également cela. Décochez les deux autres. Cliquez sur Appliquer.

Pour en revenir à l'onglet Entrées, GNU C ++ CDT gère les entrées de paramètres de construction, vous devriez maintenant voir votre ajouté

__GXX_EXPERIMENTAL_CXX0X__

entrée.

C'est tout. Lors du codage, de la frappe

std::

peut maintenant compléter automatiquement la classe de threads par exemple, les versions devraient fonctionner correctement et il ne devrait pas y avoir

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

lors de l'exécution.


C'était l' Project -> Properties -> C/C++ Build -> Settings -> Miscellaneousétape qui a fonctionné pour moi. Merci beaucoup: D
Jake88

2

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 une plateforme eclipse normale installée en utilisant sudo apt-get install eclipse dans Ubuntu Mais j'ai trouvé une solution qui adopte la méthode ensemble à la fois 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 plus 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'ajouter et d'ajouter deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.

(2) Sous C / C ++ Build (dans les paramètres du projet), recherchez le chemin d'inclusion du préprocesseur et accédez à l'onglet Fournisseurs. Désélectionnez tout sauf les paramètres du compilateur intégré CDT GCC. Désélectionnez ensuite Partager les entrées des paramètres…. Ajoutez l'option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur

Après avoir effectué plus de 2 et 2 étapes seulement, 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.


Cela a également fonctionné pour moi (néon éclipse). Au début, je n'ai pas désélectionné les autres fournisseurs, ce qui posait toujours des problèmes, mais la désélection de tous les autres fournisseurs que "Paramètres du compilateur intégré CDT GCC" et "Paramètres utilisateur CDT" a fonctionné. Merci!
zpon

2

Eclipse C / C ++ ne reconnaît pas le symbole std::unique_ptrmê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 ++, voici 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 paramètres 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 ++: Projets -> Index C / C ++ -> Reconstruire


C'est la seule méthode qui a fonctionné pour moi dans Eclipse 2018-12. La réponse "acceptée", etc., ne fonctionne plus en 2018-12.
David Steinhauer

1

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

  • Accédez au projet -> Propriétés -> Général C ++ -> Préprocesseur Inclure les chemins, les macros, etc. -> Fournisseurs -> Paramètres du compilateur intégré CDT Cross GCC, ajoutez l'indicateur "-std = c ++ 11"

Appuyez sur Appliquer et OK.

À votre santé,

Gars.


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

De quelle version d'Eclipse s'agit-il?
Braiam

0

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


0

Pour obtenir la prise en charge de C ++ 14 dans Eclipse Luna, vous pouvez effectuer ces étapes:

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

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


0

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 inclus dans / usr / local / include.

J'ai gravé le CD dans / usr / local / bin et créé un lien symbolique à partir de g ++ @ 7, ce qui ne fait que g ++ car ce bit @ est ennuyeux.

Ensuite, je suis allé dans MyProject -> Propriétés -> C / C ++ Build -> Paramètres -> GCC C ++ Compiler et j'ai changé la commande de "g ++" en "/ usr / local / bin / g ++". Si vous décidez de ne pas faire 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 certain temps, cela a montré un nombre impressionnant d'erreurs, mais je pense que c'était lors de la construction d'index. Pendant que je découvrais les erreurs, elles ont toutes 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 les modifier avec des chemins différents, mais je ne suis pas sûr de ce que cela fera.


0

J'ai eu un problème similaire en utilisant Eclipse C ++ 2019-03 pour un projet mixte C et C ++ qui utilisait std :: optional et std :: swap. Ce qui a fonctionné pour moi, c'est ça. Dans le projet Properties-> C / C ++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler, supprimez -std = gnu ++ 17 de Miscellaneous et placez-le à la place dans Dialect-> Other Dialect Flags.


0

Lorsque j'utilise un compilateur croisé, j'obtiens souvent des systèmes de construction personnalisés avancés méticuleusement conçus par des collègues. J'utilise "Makefile Project with Existing code", donc la plupart des autres réponses ne sont pas applicables.

Au début du projet, je dois spécifier que j'utilise un compilateur croisé dans l'assistant pour "Makefile Project with Existing Code". Ce qui est ennuyeux, c'est qu'au cours des 10 dernières années, le bouton du compilateur croisé de cet assistant ne demande pas où se trouve le compilateur croisé. Donc, dans une étape qui résout le problème C ++ et le problème du compilateur croisé, je dois aller dans l'onglet des fournisseurs comme mentionné par des réponses comme @ravwojdyla ci-dessus, mais le fournisseur que je dois sélectionner est le fournisseur du compilateur croisé. Ensuite, dans la boîte de commande, je mets le chemin complet vers le compilateur et j'ajoute -std = gnu ++ 11 pour la norme C ++ pour laquelle je veux avoir le support. Cela fonctionne aussi bien que prévu.

Vous pouvez le faire pour un projet existant. La seule chose que vous pourriez avoir à faire est de réexécuter l'indexeur.

Je n'ai jamais eu à ajouter le drapeau expérimental ou remplacer la définition de __cplusplus. La seule chose est, si j'ai une quantité substantielle de code C moderne, je n'ai nulle part où mettre l'option standard spécifique à C.

Et lorsque les choses vont vraiment mal, obtenir un journal d'analyse, en utilisant cette commande dans le sous-menu Indexer, peut être très instructif.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.