Как включить C++11 в Eclipse Juno/Kepler/Luna CDT?
РЕДАКТИРОВАТЬ: Оказывается, это действительно не относится к Eclipse Kepler. Мне пришлось использовать тот же процесс для Eclipse Juno. Проблема заключалась в том, что в других сообщениях, отвечающих на этот же вопрос, отсутствуют шаги.
Я использую Eclipse Kepler для C++, и я пытаюсь использовать C++11 и получаю ошибки. Когда я компилирую, я получаю ошибку
ошибка: циклы на основе диапазона не разрешены в режиме C++98
Я следовал инструкциям из поста
Поддержка Eclipse CDT C++11/C++0x
и решение, данное для Eclipse Juno, не работает.
Различные комментарии предложили возобновить затмение, очистку и восстановление. Это не имеет значения.
8 ответов
Вам нужно сделать две вещи: сначала нужно настроить компилятор, а затем настроить языковой процессор CDT. Поскольку вы не упомянули, какой компилятор вы используете, я предполагаю, что это GCC, но шаги будут аналогичны для других компиляторов. (Обратите внимание, что вам нужен компилятор, который поддерживает C++11, конечно.)
Настройка компилятора довольно проста:
- Щелкните правой кнопкой мыши ваш проект и выберите Свойства
- В C/C++ Build нажмите Настройки
- Под GCC C++ Compiler, нажмите Разное
- В поле "Другие флаги" добавьте "-std= C++11" к списку токенов.
- Нажмите Применить и ОК
На этом этапе вы сможете перестроить свой проект и запустить его. Но CDT все еще может показывать ошибки для C++ 11 включений. Вот как вы можете решить это:
- Щелкните правой кнопкой мыши ваш проект и выберите Свойства
- В разделе C/C++ General щелкните "Препроцессор, включите пути, макросы".
- Выберите вкладку "Поставщики"
- В списке должен быть элемент, который говорит что-то вроде "Встроенные настройки компилятора GCC". Выберите эту запись.
- Снимите флажок "Использовать глобальный поставщик..."
- Под списком есть поле с надписью "Команда для получения спецификаций компилятора". Добавьте к этому "-std= C++0x".
- Переместите поставщика "Встроенные настройки компилятора GCC" вверху списка с помощью кнопки "Вверх" справа.
- Нажмите Применить, а затем ОК.
- Вернувшись в рабочее пространство Eclipse, выберите "Меню проекта", "C / C++ Index" и нажмите "Повторное разрешение неразрешенных включений".
Поддержка C++ 11 в Eclipse Kepler Service Release 1 (идентификатор сборки: 20130919-0819)
В последнем выпуске Eclipse Kepler SR1 вам нужно только добавить -std= C++ 11
- Щелкните правой кнопкой мыши по вашему проекту и выберите Свойства
- Перейдите к C/C++ General и препроцессору, включите пути, макросы и т. Д.
- Выберите вкладку " Поставщики "
- Добавьте -std= C++ 11 в Command, чтобы получить спецификации компилятора:
- Применить изменения, индекс должен быть создан автоматически.
"Команда для получения спецификации компилятора:" должна выглядеть следующим образом:
${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
Начиная с CDT 8.3 ( доступно как обновление Kepler), в настройках сборки появился новый вариант диалекта:
Я использую Eclipse Kepler, и чтобы исправить это, я сделал это:
1 - Щелкните правой кнопкой мыши на Project >> Proprietes >> C/C++ Build:: Settings.
2 - Пошел в GCC G++ Compiler >> Разное >> Другие флаги
i then added -std=c++11
hit apply and ok
Это решило мою проблему!
Надеюсь, это помогло!
Запуск eclipse indigo и cdt 8.0.2 здесь. Я следовал всем инструкциям, но все еще было необходимо установить определение препроцессора вручную, чтобы найти такие вещи, как std::unique_ptr. Включаемый файл "память" проверяет это. Установите для __cplusplus значение 201103L на вкладке "Символы" в разделе "Пути и символы" в "C++ General" в свойствах проекта.
Добавление флага диалекта "-std= C++11" в Свойства проекта-> Сборка C/C++ -> Настройки -> Настройки инструмента (GCC C++ Compiler -> Dialect) решило мою проблему в Eclipse Kepler, за исключением настроек, указанных выше.
Я использую Eclipse Luna, и в C/C++ Build -> Settings нет "Настройки инструмента". Я сделал добавление -std= C++ 11 в командную строку спецификации компилятора в разделе "C/C++ General -> Preprocessor Includes -> Providers", как было предложено. Но это все еще не удовлетворяло способность моего индексатора разрешать emplace().
Поэтому я посмотрел в заголовочном файле и обнаружил, что функции emplace зависят от __cplusplus >= 201103L. Поэтому я просто добавил символ препроцессора "__cplusplus" и присвоил ему значение 201103.
Вроде хак, но индексатор доволен. (И makefiles определяют мои флаги сборки, а не проект eclipse)
Решение, предоставленное MrEricSir, работает только после установки последней версии Eclipse Oxygen CDT. Это не работает для меня с Mars CDT.