Как включить C++11 в Eclipse Juno/Kepler / Luna CDT?
EDIT: оказывается, это действительно не относится к Eclipse Kepler. Я должен был использовать тот же процесс для Eclipse Juno. Проблема заключалась в том, что, похоже, в других сообщениях отсутствуют шаги, отвечающие на этот же вопрос.
Я использую Eclipse Kepler для C++, и я пытаюсь использовать C++11 и получать ошибки. При компиляции я получаю ошибку
ошибка: циклы на основе диапазона не допускаются в режиме C++98
я следовал инструкциям из пост
Eclipse CDT C++11/C++0x поддержка
и решение, данное для Eclipse Juno, не работает.
различные комментарии предложили перезапустить eclipse и очистки и восстановления. Это ничего не изменило.
8 ответов:
есть две вещи, которые вы должны сделать, сначала вам нужно настроить компилятор, а затем вам нужно настроить языковой процессор CDT. Поскольку вы не упомянули, какой компилятор вы используете, я предполагаю, что это GCC, но шаги будут аналогичны для других компиляторов. (Обратите внимание, что вам нужен компилятор, который поддерживает C++11, конечно.)
настройка компилятора довольно проста:
- щелкните правой кнопкой мыши свой проект и выберите Свойства
- Под Сборкой C / C++ нажмите кнопку Настройки
- в разделе компилятор GCC C++ выберите разное
- в поле другие флаги добавьте "- std=c++11 " в список маркеров.
- Нажмите кнопку Применить и ОК
на этом этапе вы должны быть в состоянии перестроить свой проект и заставить его работать. Но CDT все еще может показывать ошибки для C++11 включает. Вот как вы можете решить эту проблему:
- щелкните правой кнопкой мыши свой проект и выберите Свойства
- в разделе C/C++ общие нажмите "Препроцессор Включает Пути, Макросы"
- выберите вкладку поставщикам
- там должен быть элемент в списке, который говорит что-то вроде "GCC встроенный в настройках компилятора". Выберите эту запись.
- снимите флажок "Использовать глобальный поставщик..."вариант
- под списком есть поле, в котором говорится: "команда для получения спецификаций компилятора."Добавить" - std=c++0x " к этому.
- переместите поставщик" GCC Built in Compiler Settings "в верхнюю часть списка, используя 'Move Up' кнопка справа.
- Нажмите кнопку Применить, а затем ОК.
- вернитесь в рабочее пространство Eclipse, выберите меню проект, Индекс C/C++ и нажмите кнопку "повторно разрешить неразрешенные включает."
поддержка C++11 в Eclipse Kepler Service Release 1 (Build id: 20130919-0819)
в последней версии Eclipse Kepler SR1 вам нужно только добавить - std=c++11
- Правой Кнопкой Мыши на проекте и выберите свойства
- перейти к C / C++ General и препроцессор включает пути, макросы и т. д.
- выберите поставщики вкладка
- добавить - std=c++11 до команда для получения спецификаций компилятора:
- применить изменения, индекс должен быть сгенерирован автоматически.
на " команда для получения спецификаций компилятора:"-строка должна выглядеть так:
${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
начиная с CDT 8.3 ( доступно как обновление Kepler), есть новая опция диалекта в настройках сборки:
Я использую Eclipse Kepler и исправить это я сделал это:
1-Щелкните правой кнопкой мыши проект > > Proprietes >> C / C++ Build :: Settings
2-перешел к компилятору GCC G++ > > разное > > другие флаги
i then added -std=c++11 hit apply and ok
это исправило мою проблему!
Я надеюсь, что это помогло!
запуск eclipse indigo и cdt 8.0.2 здесь. Я следовал всем руководствам, но все равно нужно было установить препроцессор define вручную, чтобы найти такие вещи, как std::unique_ptr. Файл "память" проверяет это. Установите __cplusplus в 201103L на вкладке " символы "в разделе" пути и символы "в" C++ General " в свойствах проекта.
добавление флага диалекта "- std=c++11 " в свойства проекта-> C/C++ Build -> Settings -> Tool settings (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)