Jak włączyć C ++ 11 w Eclipse Juno / Kepler / Luna CDT?

85

EDYCJA: Okazuje się, że to naprawdę nie jest specyficzne dla Eclipse Kepler. Musiałem użyć tego samego procesu dla Eclipse Juno. Problem polegał na tym, że wydaje się, że w innych postach brakuje odpowiedzi na to samo pytanie.

Używam Eclipse Kepler dla C ++ i próbuję używać C ++ 11 i otrzymuję błędy. Podczas kompilacji pojawia się błąd

błąd: pętle for oparte na zakresie są niedozwolone w trybie C ++ 98

Postępowałem zgodnie z instrukcjami z postu

Obsługa Eclipse CDT C ++ 11 / C ++ 0x

a rozwiązanie podane dla Eclipse Juno nie działa.

Różne komentarze sugerowały ponowne uruchomienie zaćmienia oraz czyszczenie i odbudowę. To nie ma znaczenia.

user327301
źródło

Odpowiedzi:

183

Musisz zrobić dwie rzeczy: najpierw musisz skonfigurować kompilator, a następnie musisz skonfigurować procesor języka CDT. Ponieważ nie wspomniałeś, którego kompilatora używasz, zakładam, że to GCC, ale kroki będą podobne dla innych kompilatorów. (Pamiętaj, że potrzebujesz oczywiście kompilatora obsługującego C ++ 11).

Konfiguracja kompilatora jest dość prosta:

  1. Kliknij prawym przyciskiem myszy projekt i kliknij opcję Właściwości
  2. W obszarze C / C ++ Build kliknij opcję Ustawienia
  3. W obszarze Kompilator GCC C ++ kliknij opcję Różne
  4. W polu Inne flagi dodaj „-std = c ++ 11” do listy tokenów.
  5. Kliknij Zastosuj i OK

W tym momencie powinieneś być w stanie odbudować swój projekt i uruchomić go. Ale CDT nadal może wyświetlać błędy dla C ++ 11 obejmuje. Oto, jak możesz to rozwiązać:

  1. Kliknij prawym przyciskiem myszy projekt i kliknij opcję Właściwości
  2. W C / C ++ General kliknij „Preprocessor Include Paths, Macros”
  3. Wybierz kartę Dostawcy
  4. Na liście powinna znajdować się pozycja przypominająca „Ustawienia kompilatora wbudowanego w GCC”. Wybierz ten wpis.
  5. Odznacz opcję „Użyj dostawcy globalnego ...”
  6. Pod listą znajduje się pole z napisem „Polecenie pobierania specyfikacji kompilatora”. Dołącz do tego „-std = c ++ 0x”.
  7. Przenieś dostawcę „GCC Built in Compiler Settings” na górę listy za pomocą przycisku „Move Up” po prawej stronie.
  8. Kliknij Zastosuj, a następnie OK.
  9. Wróć do obszaru roboczego Eclipse, wybierz menu projektu, indeks C / C ++ i kliknij opcję „Rozwiąż ponownie nierozwiązane uwzględnienia”.
MrEricSir
źródło
1
Dziękuję Ci. To zadziałało. Być może źle przeczytałem inny post, do którego umieściłem link, ale wydaje się, że nie było w nim wzmianki o konfigurowaniu kompilatora.
user327301,
1
Nie działa na mnie. Moim głównym problemem są nierozwiązane dołączenia C ++ 11. Włożyłem -std=c++11w którym mówi się wprost, a przebudowany cały indeks, nadal pokazuje crapload z nierozpoznanego std :: cout, std :: set, etc ...
Dolanor
2
EDYCJA: Nie znalazłem pierwszej części tam, gdzie powinna, ale kompiluję przez make, więc może to być wyjaśnienie. (Znalazłem to jednak w konfiguracji obszaru roboczego i ustawiłem). Ale włożyłem go do compiler speci nadal nie działa. std :: shared_ptr i to samo nie zostało rozpoznane. Chociaż kiedyś działał na starszej maszynie z juno.
Dolanor,
1
W moim przypadku (gcc) użyłem -std = c ++ 0x. Więc wszystko działa. Dziękuję Ci!
Denis Zaikin
4
@MrEricSir Czy istnieje sposób na wprowadzenie tego ustawienia dla obszaru roboczego, aby po dodaniu nowego projektu było ono automatycznie stosowane do niego?
Ivaylo Strandjev
25

Obsługa języka C ++ 11 w Eclipse Kepler Service Release 1 (identyfikator kompilacji: 20130919-0819)

W najnowszej wersji Eclipse Kepler SR1 wystarczy dodać -std = c ++ 11

  1. Kliknij prawym przyciskiem myszy projekt i kliknij opcję Właściwości
  2. Przejdź do C / C ++ General i Preprocessor Include Paths, Macros itp.
  3. Wybierz kartę Dostawcy
  4. Dodaj -std = c ++ 11 do polecenia, aby uzyskać specyfikacje kompilatora:
  5. Zastosuj zmiany, indeks powinien zostać wygenerowany automatycznie.

Linia „Polecenie pobrania specyfikacji kompilatora” powinna wyglądać następująco:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
MeJ
źródło
2
W GCC musiałem dodać -std = c ++ 0x
ccook
Którego GCC używasz? c ++ 0X to stara nazwa (alias) dla C ++ 11
MeJ
1
Znalazłem to po raz drugi podczas konfigurowania nowego CDT zaćmienia - ustawienie powinno być bardziej intuicyjne.
ccook
6

Używam Eclipse Kepler i aby to naprawić, zrobiłem to:

1 - Kliknij prawym przyciskiem myszy projekt >> Własności >> C / C ++ Build :: Settings

2 - Poszedłem do kompilatora GCC G ++ >> Różne >> Inne flagi

 i then added -std=c++11 
 hit apply and ok

To rozwiązało mój problem!

Mam nadzieję, że to pomogło!

Karrq
źródło
To najlepsza odpowiedź dla platformy Eclipse, wersja: 4.3.1 - Nie wiem, czym jest Kepler / Juno!
TCSGrad
Eclipse Kepler to Eclipse w wersji 4.3.X
Karrq
4

Uruchamiam tutaj eclipse indigo i cdt 8.0.2. Postępowałem zgodnie ze wszystkimi przewodnikami, ale nadal konieczne było ręczne zdefiniowanie preprocesora, aby znaleźć takie rzeczy, jak std :: unique_ptr. Plik nagłówkowy „memory” sprawdza to. Ustaw __cplusplus na 201103L na karcie „Symbole” w obszarze „Ścieżki i symbole” w „C ++ Ogólne” we właściwościach projektu.

David Karla
źródło
Tak, działa w przypadku migracji ze starych projektów.
Guy L
2

Dodanie flagi dialektu "-std = c ++ 11" do właściwości projektu-> C / C ++ Build -> Ustawienia -> Ustawienia narzędzi (kompilator GCC C ++ -> Dialekt) rozwiązało mój problem w Eclipse Kepler, poza ustawieniami podanymi powyżej.

mluthra
źródło
1

Używam Eclipse Luna i nie ma „Ustawienia narzędzi” w C / C ++ Build -> Ustawienia. I DID dodałem -std = c ++ 11 do wiersza poleceń kompilatora specyfikacji w „C / C ++ Ogólne -> Preprocessor Includes -> Providers” zgodnie z sugestią. Ale to nadal nie zaspokoiło zdolności mojego indeksatora do rozwiązania embrace ().

Poszukałem więc w pliku nagłówkowym i stwierdziłem, że funkcje embrace są zależne od __cplusplus> = 201103L. Dlatego właśnie dodałem symbol preprocesora „__cplusplus” i nadałem mu wartość 201103.

Trochę hackish, ale indeksator jest zadowolony. (A pliki makefile definiują flagi mojej kompilacji, a nie projekt eclipse)

Miles F. Bintz II
źródło
0

Rozwiązanie dostarczone przez MrEricSir działa dopiero po zainstalowaniu najnowszego Eclipse Oxygen CDT. Nie działa to dla mnie z Mars CDT.

StndFish
źródło