Come abilitare il supporto C ++ 11 / C ++ 0x in Eclipse CDT?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Questo è un esempio di un pezzo di codice C ++ 11:

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

L’editor di Eclipse si lamenta di:

 Function 'unique_ptr' could not be resolved 

La compilation Makefile funziona bene. Come far smettere ad Eclipse di lamentarsi di questo tipo di errori?

    Ho trovato questo articolo nel forum di Eclipse, ho appena seguito questi passaggi e funziona per me. Sto usando Eclipse Indigo 20110615-0604 su Windows con una configurazione Cygwin.

    • Crea un nuovo progetto C ++
    • Opzioni predefinite per tutto
    • Una volta creato, fai clic con il tasto destro del mouse sul progetto e vai su “Proprietà”
    • C / C ++ Build -> Impostazioni -> Impostazioni strumenti -> Compilatore CCC GCC -> Varie -> Altre marche. Put -std=c++0x (o per la versione più recente del compilatore -std=c++11 alla fine … al posto del compilatore GCC C ++ ho anche il compilatore Cygwin
    • C / C ++ Generale -> Percorsi e simboli -> Simboli -> GNU C ++. Fai clic su “Aggiungi …” e incolla __GXX_EXPERIMENTAL_CXX0X__ (assicurati di aggiungere e anteporre due caratteri di sottolineatura) in “Nome” e lasciare vuoto “Valore”.
    • Premi Applica, fai qualunque cosa ti chieda di fare, quindi premi OK.

    C’è una descrizione di questo nelle FAQ di Eclipse ora: Eclipse FAQ / C ++ 11 Features .

    Impostazione dell’immagine di Eclipse

    Istruzioni per Eclipse CDT 4.4 Luna e 4.5 Mars

    Innanzitutto, prima di creare un progetto, configura il parser di syntax di Eclipse:

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

    nella casella di testo intitolata Command to get compiler specs append -std=c++11

    Ora puoi creare un progetto, la configurazione dipende dal tipo di progetto che hai creato:

    Per progetto creato come: File -> Nuovo -> Progetto -> C / C ++ -> Progetto C ++

    Fare clic con il tasto destro sul progetto creato e aprire

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

    Inserisci -std=c++11 nella casella di testo denominata other dialect flags o seleziona ISO C++11 dall’elenco a discesa Language standard della Language standard .

    Per il progetto CMake

    Genera file di progetto eclipse (all’interno del tuo progetto)

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

    Quindi importare la directory generata in eclipse come progetto eclipse standard. Fare clic destro del progetto e aprire

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

    abilita le CDT GCC Build-in Compiler Settings e spostalo più in alto dei Contributed PathEntry Containers (questo è importante)

    Ultimo passo comune

    ricompilare, rigenerare Project -> C/C++ Index e riavviare Eclipse.

    Aggiornamento 2016:

    A partire da gcc 6 ( modifiche ), il dialetto C ++ predefinito è C ++ 14. Ciò significa che, a meno che tu non abbia bisogno esplicitamente di un dialetto più recente o più vecchio rispetto a quello, non devi più fare nulla con Eclipse.

    Per Luna e Marte

    Questa sezione wiki della comunità incorpora la risposta di Trismegistos;

    1. Prima di creare un progetto, configura il parser di syntax di Eclipse:

    Finestra -> Preferenze -> C / C ++ -> Build -> Impostazioni -> Rilevamento -> Impostazioni del compilatore GCC CDT incorporato

    nella casella di testo intitolata Comando per ottenere le specifiche del compilatore append -std=c++14 2. Crea progetto, la configurazione dipende dal tipo di progetto che hai creato:

    Per progetto creato come: File -> Nuovo -> Progetto -> C / C ++ -> Progetto C ++

    Fare clic con il tasto destro sul progetto creato e aprire

    Proprietà -> C / C ++ Build -> Impostazioni -> Impostazioni strumenti -> Compilatore CCC GCC -> Dialetto

    Inserisci -std=c++14 nella casella di testo denominata altri flag di dialetto o seleziona ISO C ++ 11 dal -std=c++14 discesa standard della lingua.

    Ora c’è un nuovo modo di risolvere questo senza l’hack GXX_EXPERIMENTAL.

    Per le versioni più recenti : (Attualmente Juno e Kepler Luna ):

    Nelle versioni più recenti di Juno le impostazioni si trovano nelle Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings () .

    Versioni precedenti 2012/2013:

    1. In C / C ++ Build (alle impostazioni del progetto), trova il percorso di inclusione del preprocessore e vai alla scheda Provider . Deseleziona tutto tranne le impostazioni del compilatore incorporato CDCC GCC. Quindi deselezionare Condividi le voci delle impostazioni …. Aggiungi l’opzione -std = c ++ 11 alla casella di testo chiamata Comando per ottenere le specifiche del compilatore.

    2. Vai a percorsi e simboli. In Simboli, fare clic su ripristina valori predefiniti e quindi applicare.


    Gli appunti:

    Eclipse è pignolo sul colpire la domanda, è necessario farlo ogni volta che si esce da una scheda delle impostazioni.

    [Auto-promozione]: ho scritto le mie istruzioni più dettagliate sulla base di quanto sopra. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

    Grazie all’utente Nobody su https://stackoverflow.com/a/13635080/1149664

    Per l’ultima (Juno) eclipse cdt il seguente ha funzionato per me, non è necessario dichiarare __GXX_EXPERIMENTAL_CXX0X__ su me stesso. Funziona per l’indicizzatore CDT e come parametro per il compilatore:

    “nome del tuo progetto” -> tasto destro del mouse -> proprietà:

    C / C ++ Generale -> Preprocessore Include percorsi, macro ecc. -> passa alla scheda denominata “Provider”:

    • per “Configurazione” selezionare “Rilascio” (e successivamente “debug”)

    • spegni tutti i provider e seleziona “Impostazioni del compilatore incorporato CDCC GCC”

    • deselezionare “Condividi le voci di impostazione tra i progetti (provider globale)”

    • nel “Comando per ottenere le specifiche del compilatore:” aggiungi “-std = c ++ 11” senza le virgolette (potrebbe funzionare anche con le virgolette)

    • premi applica e chiudi le opzioni

    • ribuild l’indice

    Ora tutte le cose relative al c ++ 11 dovrebbero essere risolte correttamente dall’indicizzatore.

    win7 x64, ultima eclipse ufficiale con cdt mingw-w64 gcc 4.7.2 dal progetto mingwbuilds su sourceforge

    Ho avuto lo stesso problema sul mio Eclipse Juno. Questi passaggi hanno risolto il problema:

    • Vai a Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .
    • Aggiungere il simbolo: __cplusplus con il valore 201103L

    Per Eclipse CDT Kepler ciò che ha funzionato per me per eliminare il simbolo std::thread non risolto è:

    1. Vai a Preferenze-> C / C ++ -> Build-> Impostazioni

    2. Seleziona la scheda Discovery

    3. Seleziona le impostazioni del compilatore incorporato nel CDC GCC [Condivisa]

    4. Aggiungi il -std = c ++ 11 al campo “Comando per ottenere le specifiche del compilatore:” come:

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

    1. Ok e ribuild l’indice per il progetto.

    Aggiunta di -std=c++11 a Project Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags non era abbastanza per Kepler, tuttavia era abbastanza per versioni precedenti come come Helios.

    Non posso ancora commentare così sto scrivendo la mia risposta:

    È relativo a __GXX_EXPERIMENTAL_CXX0X__ ed è valido per Eclipse Juno e CDT 8.x.

    Alcune parti di questa risposta sono già trattate in altre risposte, ma voglio che sia coerente.

    Per rendere ansible la compilazione usando stdc ++ 11, si deve aggiungere un flag specifico per il compilatore. Puoi farlo tramite le proprietà del progetto. Per modificare le proprietà del progetto RMB e le Project properties o ALT + ENTER . Quindi C / C ++ Build -> Impostazioni -> Impostazioni strumenti -> Compilatore CCC GCC -> Varie -> Altre marche. Put -std = c ++ 11 alla fine della riga, per GCC assomiglierà a: -c -fmessage-length=0 -std=c++11 . Aggiungendo -stdc ++ 11 il compilatore di flag (GCC) dichiarerà __GXX_EXPERIMENTAL_CXX0X__ da solo.

    A questo punto puoi build un progetto usando tutta la bontà di C ++ 11.

    Il problema è che Eclipse ha il proprio parser per verificare la presenza di errori – è per questo che stai ancora ricevendo tutti i cattivi errori nell’editor di Eclipse, mentre allo stesso tempo puoi creare ed eseguire progetti senza. C’è un modo per risolvere questo problema dichiarando esplicitamente il flag __GXX_EXPERIMENTAL_CXX0X__ per il progetto, si può farlo (proprio come ha detto Carsten Greiner): C / C ++ Generale -> Percorsi e Simboli -> Simboli -> GNU C ++. Fai clic su “Aggiungi …” e su __GXX_EXPERIMENTAL_CXX0X__ (assicurati di aggiungere e anteporre due caratteri di sottolineatura) in “Nome” e lasciare vuoto “Valore”. E ora è la parte in più che volevo coprire in commento alla prima risposta, vai a: C / C ++ Generale -> Preprocessore Include macro percorso ecc. -> Provider, e Seleziona le CDT Managed Build Setting Entries quindi fai clic su APPLICA e torna a La scheda Voci, sotto GNU C ++, dovrebbe essere ora Voci di configurazione gestita da CDT verificare se all’interno è definito __GXX_EXPERIMENTAL_CXX0X__ se esso è -> APPLY e l’indice di ricostruzione dovrebbe essere a posto a questo punto.

    Ho avuto anche diversi problemi (Ubuntu 13.04 64-bit, g ++-4.8, eclipse Juno 3.8.1, CDT 6.0.0). Un sacco di cose sono menzionate sopra, mi spiace ripeterle, ma ho anche avuto problemi nell’utilizzare

     std::thread 

    come parte di c ++ 11 (aggiungendo -pthread per il linker risolve quel problema). Comunque, finalmente queste impostazioni hanno funzionato bene:

    Progetto -> Proprietà -> C / C ++ Build -> Impostazioni -> Varie. Aggiungi il

     -std=c++11 

    flag per i compilatori GCC e G ++. Fai clic su Applica.

    Per il linker, stessa finestra, Miscellaneous, Linker flag, aggiunto il

     -pthread 

    bandiera. Impostazioni della libreria condivisa, Nome object condiviso, aggiungi il

     -Wl,--no-as-needed 

    anche la bandiera. Fai clic su Applica.

    C / C ++ Generale -> Percorsi e simboli -> Simboli TAB, GNU C ++ selezionato, Aggiungi il

     __GXX_EXPERIMENTAL_CXX0X__ 

    (nessun valore)

    bandiera. Fai clic su Applica.

    C / C ++ Generale -> Preprocessore Include percorsi .. -> Scheda Provider: verifica

    Impostazioni del compilatore incorporato nel CDG GCC

    e per “Comando per ottenere le specifiche del compilatore”, aggiungere il

     -std=c++11 

    bandiera. Deseleziona Condividi. Fai clic su Applica.

    Controllate le voci delle impostazioni di compilazione di CDT, controllate anche questo. Deseleziona gli altri due. Fai clic su Applica.

    Tornando alla scheda Voci, GNU C ++ Managages delle voci di configurazione di CDU, ora dovresti vedere il tuo aggiunto

     __GXX_EXPERIMENTAL_CXX0X__ 

    iscrizione.

    Questo è tutto. Durante la codifica, la digitazione

     std:: 

    ora è ansible completare automaticamente la class thread, le build dovrebbero funzionare correttamente e non dovrebbero esserci

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

    in fase di esecuzione.

    Non so se sia solo io, la soluzione più alta non funziona per me, la mia versione di eclipse è semplicemente la normale piattaforma di Eclipse installata usando sudo apt-get install eclipse in Ubuntu Ma ho trovato una soluzione che adotta il metodo insieme sia dalla soluzione di livello più alto che dalla seconda, quello che ho fatto per farlo funzionare è descritto di seguito (si noti che gli altri passaggi come la creazione di un progetto C ++ ecc. vengono ignorati per semplicità)

    Una volta creato il progetto C ++

    (1) C / C ++ Generale -> Percorsi e simboli -> Simboli -> GNU C ++. Fare clic su “Aggiungi …” e incollare GXX_EXPERIMENTAL_CXX0X (assicurarsi di aggiungere e anteporre due caratteri di sottolineatura) in “Nome” e lasciare vuoto “Valore”.

    (2) In C / C ++ Build (alle impostazioni del progetto), trova il percorso di inclusione del preprocessore e vai alla scheda Provider. Deseleziona tutto tranne le impostazioni del compilatore incorporato CDCC GCC. Quindi deselezionare Condividi le voci delle impostazioni …. Aggiungi l’opzione -std = c ++ 11 alla casella di testo chiamata Comando per ottenere le specifiche del compilatore

    Dopo aver eseguito solo 2 e 2 passaggi, funziona, l’eclipse è in grado di risolvere il unique_ptr, non so perché questa soluzione funzioni, spero che possa aiutare le persone.

    Per me su Eclipse Neon ho seguito la risposta Trismegistos qui sopra , ANCHE ho anche aggiunto un ulteriore passaggio:

    • Vai a progetto -> Proprietà -> C ++ Generale -> Preprocessore Include percorsi, Macro ecc. -> Provider -> Impostazioni del compilatore incorporato di CDT Cross GCC, aggiungi il flag “-std = c ++ 11”

    Hit applicare e OK.

    Saluti,

    Tipo.

    • fare clic con il tasto destro del mouse sul progetto e andare su “Proprietà”
    • C / C ++ Build -> Impostazioni -> Impostazioni strumenti -> Compilatore CCC GCC -> Varie -> Altre marche. Metti -lm alla fine della finestra di testo di altri flag e OK.

    Né l’hack né la versione più pulita funzionano per Indigo. L’hack viene ignorato e mancano le opzioni di configurazione richieste. Per nessuna ragione apparente, la build ha iniziato a funzionare dopo che non ha funzionato e non ha fornito alcun motivo utile. Almeno dalla riga di comando, ottengo risultati riproducibili.

    Per ottenere supporto per C ++ 14 in Eclipse Luna, puoi seguire questi passaggi:

    • In C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings , aggiungere “-std = c ++ 14”
    • In C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous , aggiungi “-std = c ++ 14”

    Reindicalizza il tuo progetto e alla fine riavvia Eclipse. Dovrebbe funzionare come previsto.

    Eclipse C / C ++ non riconosce il simbolo std::unique_ptr anche se hai incluso l’header di memoria C ++ 11 nel tuo file.

    Supponendo che stai usando il compilatore GNU C ++, questo è quello che ho fatto per risolvere:

    Progetto -> Proprietà -> Generale C / C ++ -> Percorsi di inclusione del preprocessore -> GNU C ++ -> Voci di impostazione dell’utente CDT

    1. Fai clic sul pulsante “Aggiungi …”

    2. Seleziona “Macro preprocessore” dal menu a discesa

       Name: __cplusplus Value: 201103L 
    3. Premi Applica, quindi OK per tornare al tuo progetto

    4. Quindi ricostruisci l’indice C ++: Progetti -> Indice C / C ++ -> Ricostruisci

    L’ho risolto in questo modo su un Mac. Ho usato Homebrew per installare l’ultima versione di gcc / g ++. Atterrano in / usr / local / bin con include in / usr / local / include.

    Ho fatto il CD in / usr / local / bin e ho creato un link simbolico da g ++ @ 7whatever a solo g ++, perché @ è fastidioso.

    Poi sono passato a MyProject -> Properties -> C / C ++ Build -> Settings -> GCC C ++ Compiler e ho cambiato il comando da “g ++” a “/ usr / local / bin / g ++”. Se decidi di non creare il collegamento simbolico, puoi essere più specifico.

    Fai la stessa cosa per il linker.

    Applicare e applicare e chiudere. Lascia che ricostruisca l’indice. Per un po ‘, ha mostrato un numero scoraggiante di errori, ma penso che sia stato durante la costruzione degli indici. Mentre stavo capendo gli errori, sono tutti scomparsi senza ulteriori azioni.


    Penso che senza verificare che potresti anche entrare in Eclipse -> Proprietà -> C / C ++ -> Core Build Toolchains e modificare quelli con percorsi diversi, ma non sono sicuro di ciò che farà.