Jak włączyć obsługę C++11/C++0x w Eclipse CDT?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Oto przykład fragmentu kodu C++11:

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

Edytor Eclipse narzeka na:

Function 'unique_ptr' could not be resolved

Kompilacja Makefile działa dobrze. Jak sprawić, by Eclipse przestało narzekać na tego typu błędy?

15 answers

ZnalazłemTen artykuł na forum Eclipse, po prostu wykonałem te kroki i działa dla mnie. Używam Eclipse Indigo 20110615-0604 na Windows z konfiguracją Cygwin.

  • Stwórz nowy projekt C++
  • domyślne opcje dla wszystkiego
  • Po utworzeniu kliknij prawym przyciskiem myszy projekt i przejdź do "Właściwości"
  • C / C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous - > Other Flags. Umieść -std=c++0x (lub dla nowszej wersji kompilatora -std=c++11 na końcu . ... zamiast kompilatora GCC c++ mam również kompilator Cygwin
  • C / C++ ogólne - > ścieżki i symbole - > Symbole - > GNU C++. Kliknij " Dodaj..."i wklej __GXX_EXPERIMENTAL_CXX0X__ (Upewnij się, że dodajesz i poprzedzasz dwa podkreślniki) do "nazwa" i pozostaw "wartość" puste.
  • Naciśnij Apply, zrób to, o co cię prosi, a następnie naciśnij OK.

Jest opis tego w Eclipse FAQ teraz również: Eclipse FAQ / C++11 Features .

Ustawienie obrazu Eclipse

 215
Author: Carsten Greiner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 13:12:04

Instrukcja dla Eclipse CDT 4.4 Luna i 4.5 Mars

Po pierwsze, przed utworzeniem projektu należy skonfigurować parser składni Eclipse:

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

W polu tekstowym zatytułowanym Command to get compiler specs Dołącz -std=c++11

Teraz możesz tworzyć projekt, konfiguracja zależy od tego, jaki projekt utworzyłeś:

Dla projektu utworzonego jako: File - > New - > Project -> C/C++ - > C++ Project

Prawo kliknij na utworzony projekt i otwórz

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

Umieść -std=c++11 w polu tekstowym zatytułowanym other dialect flags lub wybierz ISO C++11 z listy rozwijanej Language standard.

Dla projektu CMake

Generowanie plików projektu eclipse (wewnątrz projektu)

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

Następnie zaimportuj wygenerowany katalog do eclipse jako standardowy projekt eclipse. Kliknij prawym przyciskiem myszy projekt i otwórz

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

Włącz CDT GCC Build-in Compiler Settings i przesuń ją wyżej niż Contributed PathEntry Containers (jest to ważne)

Ostatni Wspólny Krok

Rekompilować, regenerować Project ->C/C++ Index i uruchom ponownie Eclipse.

 145
Author: Trismegistos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 14:19:18

Aktualizacja 2016:

Od gcc 6 (changes ), domyślnym dialektem C++ jest C++14. Oznacza to, że jeśli wyraźnie nie potrzebujesz nowszego lub starszego dialektu niż than, nie musisz już nic robić z eclipse.

Dla Luny i Marsa

Ta sekcja wiki społeczności zawiera odpowiedź Trismegistosa;

1. Przed utworzeniem projektu należy skonfigurować parser składni Eclipse:

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

W polu tekstowym zatytułowanym polecenie get Get compiler specs append -std=c++14 2. Utwórz projekt, konfiguracja zależy od tego jaki projekt stworzyłeś:

Dla projektu utworzonego jako: File -> New -> Project -> C/C++ - > C++ Project

Kliknij prawym przyciskiem myszy utworzony projekt i otwórz

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

Umieść -std=c++14 w polu tekstowym inne flagi dialektu lub wybierz ISO C++11 z listy rozwijanej standard języka.

Jest teraz nowy sposób, aby rozwiązać to bez gxx_experimental hack.

Dla najnowszych wersji: (obecnie Juno i Kepler Luna):

W nowszych wersjach Juno ustawienia znajdują się pod adresem Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Starsze wersje 2012/2013:

  1. W C / C++ Build (w ustawieniach projektu), znajdź preprocesor zawiera ścieżkę i przechodzi do zakładki Providers . Usuń zaznaczenie wszystkich ustawień kompilatora z wyjątkiem CDT GCC. Następnie untag Udostępnij wpisy ustawień.... Dodaj opcję-std=c++11 do pola tekstowego o nazwie Command, aby uzyskać specyfikację kompilatora.

  2. Przejdź do ścieżek i symboli. W obszarze Symbole Kliknij Przywróć domyślne wartości , a następnie zastosuj.


uwagi:

Eclipse jest wybredny w uderzaniu apply, musisz to robić za każdym razem zostawiasz zakładkę Ustawienia.

[autopromocja]: napisałem własną, bardziej szczegółową instrukcję na podstawie powyższego. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Podziękowania dla użytkownika Nobody w https://stackoverflow.com/a/13635080/1149664

 110
Author: Johan Lundberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:50

Dla najnowszego (Juno) eclipse cdt zadziałało dla mnie, nie trzeba deklarować __GXX_EXPERIMENTAL_CXX0X__ na sobie. Działa to dla indeksatora CDT i jako parametr dla kompilatora:

"Nazwa projektu" - > kliknij prawym przyciskiem myszy - > Właściwości:

C / C++ ogólne - > preprocesor zawiera ścieżki, makra itp. - >Przełącz do zakładki "dostawcy":

  • Dla "Configuration "wybierz" Release "(a następnie "debug")

  • Wyłącz wszystkich dostawców i po prostu wybierz "CDT GCC Built-in Compiler Settings "

  • Odznacz " Udostępnij wpisy ustawień między projektami (globalny dostawca)"

  • W "poleceniu, aby uzyskać specyfikację kompilatora: "dodaj" - std=c++11 " bez cudzysłowów (może również działać z cudzysłowami)

  • Kliknij Zastosuj i zamknij opcje

  • Rebuild the index

Teraz wszystkie rzeczy związane z c++11 powinny być poprawnie rozwiązane przez indexer.

Win7 x64, Najnowszy oficjalny eclipse z cdt mingw-w64 gcc 4.7.2 Z projektu mingwbuilds na sourceforge

 20
Author: Andreas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-10 11:34:38

Miałem ten sam problem na moim Eclipse Juno. Te kroki rozwiązały problem:

  • Przejdź do Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • Dodaj symbol: _ _ cplusplus z wartością 201103l
 15
Author: Jerome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-08 17:21:16

Dla Eclipse CDT Kepler co mi pomogło pozbyć sięstd::thread nierozwiązanego symbolu to:

  1. Przejdź do Preferences->C/C++->Build->Settings

  2. Wybierz zakładkę Discovery

  3. Select CDT GCC Built-in Compiler Settings [Shared]

  4. Dodaj-std = c++11 do pola " Command to get the compiler specs:", takiego jak:

${polecenie} - E-P - V-dD-std=c++11 ${wejścia}

  1. Ok i Przebuduj indeks dla projekt.

Dodanie -std=c++11 do projektu Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flagi nie wystarczały Keplerowi, jednak starczyło to starszym wersjom, takim jak Helios.

 11
Author: user3348915,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-01 13:25:04

Nie mogę jeszcze skomentować więc piszę własną odpowiedź:

Jest powiązany z __GXX_EXPERIMENTAL_CXX0X__ i jest ważny dla Eclipse Juno i CDT 8.x.

Niektóre części tej odpowiedzi są już omówione w innych odpowiedziach, ale chcę, aby była spójna.

Aby możliwe było budowanie przy użyciu stdc++11, należy dodać odpowiednią flagę dla kompilatora. Możesz to zrobić za pomocą właściwości projektu. Aby zmodyfikować właściwości projektu RMB iProject properties lub ALT + ENTER. Następnie C / C++ Build - > Settings - > Tool Settings - > GCC C++ Kompilator - > Różne - > Inne Flagi. Put-std=c++11 na końcu linii, dla GCC będzie to wyglądało mniej więcej tak: -c -fmessage-length=0 -std=c++11. Poprzez dodanie-STDC++11 FLAG compiler (GCC) sam zadeklaruje __GXX_EXPERIMENTAL_CXX0X__.

W tym momencie możesz zbudować projekt używając całej dobroci C++11.

Problem polega na tym, że Eclipse ma swój własny parser do sprawdzania błędów - dlatego wciąż dostajesz wszystkie paskudne błędy w edytorze Eclipse, a jednocześnie możesz budować i uruchamiać Projekt bez żadnych. Istnieje sposób na rozwiązanie tego problemu poprzez jawne zadeklarowanie __GXX_EXPERIMENTAL_CXX0X__ flagi dla projektu, można to zrobić (tak jak powiedział Carsten Greiner): C / C++ ogólne - > ścieżki i symbole - > Symbole - > GNU C++. Kliknij " Dodaj..."i past __GXX_EXPERIMENTAL_CXX0X__ (upewnij się, że dodajesz i poprzedzasz dwa podkreślniki) do "Name" i pozostaw" Value " puste. A teraz jest dodatkowa część, którą chciałem poruszyć w komentarzu do pierwszej odpowiedzi, przejdź do: C / C++ ogólne - > preprocesor zawiera makra ścieżek itp. - >Dostawcy i wybierz CDT Managed Build Setting Entries, a następnie kliknij Zastosuj i wróć do zakładki Entries, pod GNU C++ powinno być teraz CDT Managed Build setting Entries sprawdź, czy wewnątrz jest zdefiniowany __GXX_EXPERIMENTAL_CXX0X__ jeśli jest - > APPLY and rebuild index powinieneś być w tym momencie w porządku.

 5
Author: ravwojdyla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-26 20:23:17

Też miałem kilka problemów (Ubuntu 13.04 64-bit, G++-4.8, eclipse Juno 3.8.1, CDT 6.0.0). Wiele rzeczy jest wymienionych powyżej, przepraszam, że to powtarzam, ale dodatkowo miałem problemy z wykorzystaniem

std::thread

Jako część c++11 (dodanie -pthread dla linkera rozwiązuje ten problem). W każdym razie, w końcu te ustawienia działały dobrze:

Project - > Properties - > C/C++ Build - > Settings - > Miscellaneous. Dodaj

-std=c++11

Flaga dla kompilatorów GCC i G++. Klik Aplikuj.

Dla linkera, same window, Miscellaneous, flagi linkera, Dodano

-pthread

Flaga. Ustawienia biblioteki współdzielonej, Nazwa współdzielonego obiektu, dodaj

-Wl,--no-as-needed

Flaga też. Kliknij Zastosuj.

C / C++ General - > Paths and symbols - > Symbols TAB, GNU C++ selected, Add the

__GXX_EXPERIMENTAL_CXX0X__

(brak wartości)

Flaga. Kliknij Zastosuj.

C / C++ ogólne - > preprocesor zawiera ścieżki.. - >Zakładka Providers: check

CDT GCC wbudowany kompilator Ustawienia

I dla "polecenia, aby uzyskać specyfikację kompilatora", dodaj

-std=c++11

Flaga. Odznacz Opcję Udostępnij. Kliknij Zastosuj.

CDT Managages Build setting Entries, sprawdź też to. Odznacz dwie pozostałe. Kliknij Zastosuj.

Wracając do zakładki wpisy, GNU C++ CDT Managages Build setting Entries, powinieneś teraz zobaczyć dodane

__GXX_EXPERIMENTAL_CXX0X__

Wpis.

To wszystko. Podczas kodowania, wpisując
std::

Może teraz automatycznie uzupełniać klasę wątku na przykład, buildy powinny działa dobrze i nie powinno być

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

W czasie trwania.

 3
Author: Ola Aronsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-28 01:01:10

Nie wiem czy to tylko ja, Najwyżej oceniane rozwiązanie mi nie działa, moja wersja eclipse to po prostu normalna Platforma eclipse zainstalowana przy użyciu sudo apt-get install eclipse w Ubuntu Ale znalazłem rozwiązanie, które przyjmuje metody z obu najwyżej rankingu rozwiązanie i drugie, co zrobiłem, aby to działa jest opisane poniżej (zauważ, że inne kroki, takie jak tworzenie projektu C++ itp. jest ignorowany dla prostoty)

Po utworzeniu C++ projekt

(1) C/C++ ogólne - > ścieżki i symbole - > Symbole - > GNU C++. Kliknij " Dodaj..."i wklej GXX_EXPERIMENTAL_CXX0X (Upewnij się, że dodajesz i poprzedzasz dwa podkreślniki) do "nazwa" i pozostaw "wartość" puste.

(2) w C/C++ Build (w ustawieniach projektu) znajdź ścieżkę dołączania preprocesora i przejdź do zakładki dostawcy. Usuń zaznaczenie wszystkich ustawień kompilatora z wyjątkiem CDT GCC. Następnie untag Udostępnij wpisy ustawień.... Dodaj opcję-std=c++11 do pola tekstowego o nazwie Command to Pobierz specyfikację kompilatora

Po wykonaniu powyzej 2 i 2 tylko kroków, dziala, eclipse jest w stanie rozwiazac unique_ptr, Nie wiem dlaczego to rozwiazanie dziala, mam nadzieje ze pomoze ludziom.

 2
Author: doody1986,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-23 17:37:00

Dla mnie na Eclipse Neon I followed Trismegistos odpowiedź tutaj powyżej , jednak dodałem jeszcze dodatkowy krok:

  • przejdź do project -- > Properties -- > C++ General -- > preprocesor zawiera ścieżki,makra itp. -- >Providers -- > CDT Cross GCC wbudowane ustawienia kompilatora, dołączyć flagę "-std = c++11"

Hit Zastosuj i OK.

Pozdrawiam,

Guy.

 1
Author: Guy Avraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-18 05:22:15
  • Kliknij prawym przyciskiem myszy projekt i przejdź do "Właściwości"
  • C / C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous - > Other Flags. Umieść -lm na końcu pola tekstowego inne flagi i OK.
 0
Author: Sameera Chanaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 01:21:38

Ani hack, ani wersja cleaner nie działają dla Indigo. Hack jest ignorowany, a wymaganych opcji konfiguracyjnych brakuje. Bez wyraźnego powodu, build zaczął działać po niedziałaniu i nie podając żadnego użytecznego powodu. Przynajmniej z wiersza poleceń otrzymuję powtarzalne wyniki.

 0
Author: Jerry Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-05 16:36:41

Aby uzyskać wsparcie dla C++14 w Eclipse Luna, możesz wykonać następujące kroki:

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

Reindeksuj swój projekt i ostatecznie uruchom ponownie Eclipse. Powinno działać zgodnie z oczekiwaniami.

 0
Author: Jerome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-20 15:43:23

Eclipse C / C++ nie rozpoznaje symbolu std::unique_ptr, mimo że umieściłeś nagłówek pamięci C++11 w swoim pliku.

Zakładając, że używasz kompilatora GNU C++, to jest to, co zrobiłem, aby naprawić:

Project -> Properties -> C/C++ General -> Preprocessor Include Paths -> GNU C++ -> CDT User Setting Entries

  1. Kliknij na "Dodaj..."button

  2. Wybierz "Makro preprocesora" z menu rozwijanego

    Name: __cplusplus     Value:  201103L
    
  3. Hit Zastosuj, oraz następnie OK, aby wrócić do projektu

  4. Następnie Przebuduj indeks C++: Projects -> C/C++ Index - > Rebuild

 0
Author: Rubens Gomes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 02:50:42

Rozwiązałem to w ten sposób na Macu. Użyłem Homebrew do zainstalowania najnowszej wersji gcc / g++. Lądują w /usr / local / bin z includes w / usr / local / include.

I CD ' D do / usr / local / bin i wykonane dowiązanie symboliczne z G++@7whatever po prostu g++ bo @ bit jest denerwujące.

Potem poszedłem do MyProject -> Properties -> C/C++ Build -> Settings -> GCC C++ Compiler i zmieniłem polecenie z "g++" na "/usr/local/bin/g++". Jeśli zdecydujesz się nie tworzyć dowiązania symbolicznego, możesz być bardziej dokładnie.

Zrób to samo dla linkera.

Apply and Apply and Close. Niech odbuduje indeks. Przez jakiś czas wykazywał zniechęcającą liczbę błędów, ale myślę, że było to podczas budowania indeksów. Kiedy zastanawiałam się nad błędami, wszystkie zniknęły bez dalszych działań.


Myślę, że bez weryfikacji, że można również przejść do Eclipse -> Properties - > C / C++ - > Core Build Toolchains i edytować te z różnymi ścieżkami, ale nie jestem pewien, co to będzie zrób.

 0
Author: Joseph Larson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 17:37:20