Як увімкнути C ++ 11 у Eclipse Juno / Kepler / Luna CDT?


85

EDIT: Виявляється, це дійсно не специфічно для Eclipse Kepler. Мені довелося застосувати той самий процес для Eclipse Juno. Проблема полягала в тому, що в інших публікаціях, що відповідають на це саме запитання, відсутні кроки.

Я використовую Eclipse Kepler для C ++, і я намагаюся використовувати C ++ 11 і отримую помилки. Коли я компілюю, я отримую помилку

помилка: цикли на основі діапазону заборонені в режимі C ++ 98

Я дотримувався вказівок із поста

Підтримка Eclipse CDT C ++ 11 / C ++ 0x

і рішення для Eclipse Juno не працює.

Різні коментарі пропонують перезапустити eclipse та почистити та відновити. Це не змінило ситуації.

Відповіді:


183

Потрібно зробити дві речі: спочатку потрібно налаштувати компілятор, потім налаштувати мовний процесор CDT. Оскільки ви не згадали, який компілятор ви використовуєте, я вважаю, що це GCC, але кроки будуть подібними для інших компіляторів. (Зверніть увагу, що вам потрібен компілятор, який підтримує C ++ 11, звичайно.)

Налаштування компілятора досить просто:

  1. Клацніть проект правою кнопкою миші та натисніть Властивості
  2. У розділі C / C ++ Build натисніть Налаштування
  3. У розділі Компілятор GCC C ++ клацніть Різне
  4. У полі Інші прапори додайте "-std = c ++ 11" до списку маркерів.
  5. Клацніть Застосувати та ОК

На цьому етапі ви зможете відновити свій проект і змусити його запуститись. Але CDT все ще може виявляти помилки для C ++ 11 включає. Ось як це можна вирішити:

  1. Клацніть проект правою кнопкою миші та натисніть Властивості
  2. У розділі C / C ++ General натисніть "Preprocessor Include Paths, Macros"
  3. Виберіть вкладку Постачальники
  4. У списку повинен бути пункт, який говорить щось на зразок "GCC Built in Compiler Settings". Виберіть цей запис.
  5. Зніміть прапорець біля пункту "Використовувати глобального постачальника ..."
  6. Під списком є ​​поле з написом "Команда для отримання специфікацій компілятора". Додайте до цього "-std = c ++ 0x".
  7. Перемістіть постачальника "Вбудовані налаштування компілятора GCC" угорі списку, натиснувши кнопку "Перемістити вгору" праворуч.
  8. Натисніть Застосувати, а потім OK.
  9. Повернувшись у робочу область Eclipse, виберіть меню проекту, індекс C / C ++ і натисніть "Повторно вирішити невирішені пропозиції".

1
Дякую. Це спрацювало. Можливо, я неправильно прочитав інший допис, на який я посилався, але, схоже, про те, щоб налаштувати компілятор, у цій публікації не було жодної згадки.
user327301

1
Не працює у мене. Моя головна проблема - це невирішені можливості c ++ 11. Я помістив -std=c++11туди, де ви сказали, щоб поставити, і відновив повний індекс, все ще показує лайно невизнаного std :: cout, std :: set тощо ...
Доланор

2
РЕДАГУВАТИ: Я не знайшов першої частини там, де слід, але складаю за допомогою make, тому це може бути поясненням. (Хоча я знайшов його у конфігурації робочої області та встановив). Але я помістив це в compiler spec, і все ще не працює. std :: shared_ptr і те саме не розпізнано. Хоча раніше це працювало на старій машині з juno.
Доланор

1
У моєму випадку (gcc) я використовував -std = c ++ 0x. Отже, все працює. Дякую!
Денис Зайкін

4
@MrEricSir чи є спосіб зробити це налаштування для робочої області, щоб, коли я додаю новий проект, він автоматично застосовувався до нього?
Івайло Страндж

25

Підтримка C ++ 11 у службі Eclipse Kepler, випуск 1 (ідентифікатор збірки: 20130919-0819)

В останньому випуску Eclipse Kepler SR1 вам потрібно лише додати -std = c ++ 11

  1. Клацніть правою кнопкою миші на своєму проекті та натисніть Властивості
  2. Перейдіть до C / C ++ General і Preprocessor Include Paths, Macros тощо.
  3. Виберіть вкладку Постачальники
  4. Додайте -std = c ++ 11 до команди, щоб отримати характеристики компілятора:
  5. Застосовуйте зміни, індекс повинен генеруватися автоматично.

Рядок "Команда для отримання специфікацій компілятора:" повинен виглядати так:

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

2
До GCC мені довелося додати -std = c ++ 0x
ccook

Яким GCC ви використовуєте? c ++ 0X - це стара назва (псевдонім) для C ++ 11
MeJ

1
Знайшов це вдруге, налаштовуючи свіжий CDL eclipse - налаштування цього має бути більш інтуїтивним.
ccook


6

Я використовую Eclipse Kepler і для його виправлення я зробив це:

1 - Клацніть правою кнопкою миші проект >> Власність >> C / C ++ Build :: Settings

2 - пішов до компілятора GCC G ++ >> Різне >> Інші прапори

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

Це вирішило мою проблему!

Сподіваюся, це допомогло!


Це найкраща відповідь для платформи Eclipse, версія: 4.3.1 - Не знаю, що таке Kepler / Juno!
TCSGrad

Eclipse Kepler - це Eclipse версії 4.3.X
Karrq,

4

Тут працює eclipse indigo та cdt 8.0.2. Я дотримувався всіх посібників, але все одно потрібно було вручну встановити визначення препроцесора, щоб знайти такі речі, як std :: unique_ptr. Файл include "memory" перевіряє це. Встановіть __cplusplus на 201103L на вкладці "Символи" в розділі "Шляхи та символи" в "Загальні C ++" у властивостях проекту.


Так, працює для міграцій зі старих проектів.
Guy L

2

Додавання діалектного прапора "-std = c ++ 11" до властивостей проекту-> C / C ++ Build -> Settings -> Settings settings (GCC C ++ Compiler -> Dialect) вирішило мою проблему в Eclipse Kepler, крім зазначених вище налаштувань.


1

Я використовую Eclipse Luna, і в розділі C / C ++ Build -> Settings немає "Налаштування інструменту". Я ЗРОБИЛА додати -std = C ++ 11 для компілятора Спекуляції командного рядка під "/ General C ++ C -> Preprocessor Включає -> Провайдери" , як запропоновано. Але це все одно не задовольнило здатність мого індексатора вирішувати emplace ().

Тож я подивився у файлі заголовка і виявив, що функції emplace залежать від __cplusplus> = 201103L. Тож я щойно додав символ препроцесора "__cplusplus" і надав йому значення 201103.

Якийсь хакерський, але індексатор задоволений. (А make-файли визначають мої прапори збірки, а не проект eclipse)


0

Рішення, надане MrEricSir, працює лише після встановлення останнього CDT Eclipse Oxygen. Мені це не вдається з Mars CDT.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.