Как включить поддержку C ++ 11 / C ++ 0x в Eclipse CDT? - PullRequest
208 голосов
/ 03 февраля 2012

Затмение 3.7.1 CDT 1.4.1 GCC 4.6.2

Это пример фрагмента кода C ++ 11:

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

Редактор Eclipse жалуется на:

Function 'unique_ptr' could not be resolved

Компиляция Makefile работает нормально. Как заставить Eclipse перестать жаловаться на подобные ошибки?

Ответы [ 16 ]

220 голосов
/ 04 февраля 2012

Я нашел эту статью на форуме Eclipse, просто выполнил эти шаги, и она работает для меня. Я использую Eclipse Indigo 20110615-0604 в Windows с установкой Cygwin.

  • Создать новый проект C ++
  • Параметры по умолчанию для всего
  • После создания щелкните правой кнопкой мыши проект и перейдите в «Свойства»
  • Сборка C / C ++ -> Настройки -> Настройки инструмента -> Компилятор GCC C ++ -> Разное -> Другие флаги. Поставьте -std=c++0x (или для более новой версии компилятора -std=c++11 в конце. ... вместо компилятора GCC C ++ у меня также есть компилятор Cygwin
  • C / C ++ Общее -> Пути и символы -> Символы -> GNU C ++. Нажмите «Добавить ...» и вставьте __GXX_EXPERIMENTAL_CXX0X__ (добавьте и добавьте два подчеркивания) в поле «Имя» и оставьте поле «Значение» пустым.
  • Нажмите Применить, сделайте все, что от вас требуется, затем нажмите ОК.

Это описание есть и в Eclipse FAQ: Eclipse FAQ / Особенности C ++ 11 .

Настройка изображения Eclipse

146 голосов
/ 03 июля 2014

Инструкция для Eclipse CDT 4.4 Luna и 4.5 Mars

Сначала, перед созданием проекта, настройте синтаксический анализатор Eclipse:

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

в текстовом поле, озаглавленном Command to get compiler specs append -std=c++11

Теперь вы можете создать проект, конфигурация зависит от того, какой проект вы создали:

Для проекта, созданного как: Файл -> Новый -> Проект -> C / C ++ -> Проект C ++

Щелкните правой кнопкой мыши по созданному проекту и откройте

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

Поместите -std=c++11 в текстовое поле с названием other dialect flags или выберите ISO C++11 из выпадающего списка Language standard.

Для проекта CMake

Генерация файлов проекта затмения (внутри вашего проекта)

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

Затем импортируйте сгенерированный каталог в eclipse как стандартный проект eclipse. Щелкните правой кнопкой мыши проект и откройте

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

включить CDT GCC Build-in Compiler Settings и переместить его выше Contributed PathEntry Containers (это важно)

Последний общий шаг

перекомпилировать, восстановить Project -> C/C++ Index и перезапустить Eclipse.

110 голосов
/ 25 ноября 2012

Обновление 2016:

Начиная с gcc 6 ( изменяется ), диалект C ++ по умолчанию - C ++ 14.Это означает, что если вам явно не нужен более новый или более старый диалект, чем чем-либо, вам больше не нужно ничего делать с затмением.

Для Луны и Марса

Этот раздел вики сообщества содержит ответ Трисмегистоса;

1.Перед созданием проекта настройте синтаксический анализатор Eclipse:

Окно -> Настройки -> C / C ++ -> Построение -> Настройки -> Обнаружение -> Параметры встроенного компилятора CDT GCC

в текстовое поле под названием Команда для получения спецификаций компилятора добавьте -std=c++14 2.Создать проект, конфигурация зависит от того, какой проект вы создали:

Для проекта, созданного как: Файл -> Новый -> Проект -> C / C ++ -> Проект C ++

Rightщелкните созданный проект и откройте

Свойства -> Сборка C / C ++ -> Настройки -> Настройки инструмента -> Компилятор GCC C ++ -> Диалект

Поместите -std=c++14 в текстовое поле с названием другого диалекта.установите флажок или выберите ISO C ++ 11 из раскрывающегося списка Стандарт языка.

Теперь существует новый способ решения этой проблемы без взлома GXX_EXPERIMENTAL.

Для самых последних версий : (В настоящее время Юнона и Кеплер Луна ):

В более новых версиях Juno настройки расположены на Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Старые версии 2012/2013:

  1. В C / C ++ Build (в настройках проекта) найдите препроцессор Включить Путь и перейдите на вкладку поставщиков .Отмените выбор всех параметров, кроме настроек компилятора CDT GCC.Затем снимите отметку «Поделиться настройками записи». Добавьте параметр -std = c ++ 11 в текстовое поле под названием Command, чтобы получить спецификации компилятора.

  2. Перейти к путям и символам.Под Символами нажмите восстановить значения по умолчанию , а затем применить.


Примечания:

Eclipse требователен к ударам, необходимо применять его каждый раз, когда вы покидаете вкладку настроек.

[Самореклама]: я написал свои более подробные инструкции, основанные на вышеизложенном.http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Спасибо пользователю Nobody в https://stackoverflow.com/a/13635080/1149664

20 голосов
/ 10 марта 2013

Для последнего (Juno) затмения мне помогло следующее, не нужно объявлять __GXX_EXPERIMENTAL_CXX0X__ на себя.Это работает для индексатора CDT и в качестве параметра для компилятора:

"имя вашего проекта" -> щелчок правой кнопкой мыши -> свойства:

Общие сведения о C / C ++ -> Пути препроцессора, макросыи т. д. -> переключитесь на вкладку с именем «Поставщики»:

  • для «Конфигурации» выберите «Отпустить» (а затем «Отладка»)

  • отключить всех провайдеров и просто выбрать «Настройки встроенного компилятора CDT GCC»

  • снять отметку «Совместное использование записей настроек между проектами (глобальный провайдер)»

  • в «Команде для получения спецификаций компилятора:« добавить »-std = c ++ 11» без кавычек (может работать и с кавычками)

  • нажать применить и закрытьопции

  • перестроить индекс

Теперь все, что связано с c ++ 11, должно корректно обрабатываться индексатором.

win7 x64, последнее официальное затмение с cdt mingw-w64 gcc 4.7.2 из проекта mingwbuilds на sourceforge

15 голосов
/ 08 марта 2014

У меня была такая же проблема на Eclipse Juno.Эти шаги решили проблему:

  • Перейти к Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • Добавьте символ: __ cplusplus со значением 201103L
11 голосов
/ 25 февраля 2014

Для Eclipse CDT Kepler мне удалось избавиться от std::thread неразрешенного символа:

  1. Зайдите в Настройки-> C / C ++ -> Построить-> Настройки

  2. Выберите вкладку Discovery

  3. Выбор настроек встроенного компилятора CDT GCC [Shared]

  4. Добавьте -std = c ++ 11 в поле «Команда для получения спецификации компилятора:», например:

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

  1. ОК и перестройте индекс для проекта.

Добавление -std=c++11 к проекту Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Для Кеплера флагов было недостаточно, однако этого было достаточно для более старых версий, таких как Helios.

5 голосов
/ 27 февраля 2013

Я пока не могу комментировать, поэтому пишу свой ответ:

Это относится к __GXX_EXPERIMENTAL_CXX0X__ и действительно для Eclipse Juno и CDT 8.x.

Некоторые части этого ответа уже описаны в других ответах, но я хочу, чтобы он был последовательным.

Чтобы сделать возможным сборку с использованием stdc ++ 11, нужно добавить специальный флаг для компилятора. Вы можете сделать это через свойства проекта. Для изменения свойств проекта RMB и Project properties или ALT + ENTER. Затем C / C ++ Build -> Настройки -> Настройки инструмента -> Компилятор GCC C ++ -> Разное -> Другие флаги. Поместите -std = c ++ 11 в конце строки, для GCC это будет выглядеть примерно так: -c -fmessage-length=0 -std=c++11. При добавлении -stdc ++ 11 флаг компилятор (GCC) сам объявит __GXX_EXPERIMENTAL_CXX0X__.

На данный момент вы можете построить проект, используя все возможности C ++ 11.

Проблема в том, что Eclipse имеет свой собственный анализатор для проверки ошибок - вот почему вы по-прежнему получаете все неприятные ошибки в редакторе Eclipse, в то же время вы можете создавать и запускать проект без каких-либо ошибок. Есть способ решить эту проблему, явно объявив флаг __GXX_EXPERIMENTAL_CXX0X__ для проекта, это можно сделать (как сказал Карстен Грайнер): C / C ++ Общее -> Пути и символы -> Символы -> GNU C ++. Нажмите «Добавить ...» и введите __GXX_EXPERIMENTAL_CXX0X__ (добавьте и добавьте два подчеркивания) в «Имя» и оставьте «Значение» пустым А теперь о дополнительной части, которую я хотел бы охватить в комментарии к первому ответу, перейдите по ссылке: C / C ++ General -> препроцессор, включите макросы пути и т. Д. -> Providers, и выберите CDT Managed Build Setting Entries, затем нажмите APPLY и вернитесь на вкладку Entries, в GNU C ++ теперь должна быть запись CDT Managed Build Setting Entries, если внутри определено __GXX_EXPERIMENTAL_CXX0X__ если это -> ПРИМЕНИТЬ и перестроить индекс, у вас все будет хорошо.

3 голосов
/ 26 января 2014

У меня тоже было несколько проблем (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0).Многое упомянуто выше, извините, чтобы повторить это, но кроме того у меня были проблемы с использованием

std::thread

в качестве части c ++ 11 (добавление -pthread для компоновщика решает эту проблему).В любом случае, наконец, эти настройки работали нормально:

Проект -> Свойства -> Сборка C / C ++ -> Настройки -> Разное.Добавьте флаг

-std=c++11

для компиляторов GCC и G ++.Нажмите Apply.

Для компоновщика, в том же окне, Разное, Флаги компоновщика, добавлен флаг

-pthread

.Настройки общей библиотеки, Имя общего объекта, добавьте флаг

-Wl,--no-as-needed

.Нажмите Применить.

Общие сведения о C / C ++ -> Пути и символы -> Выбранные символы TAB, GNU C ++, Добавьте флаг

__GXX_EXPERIMENTAL_CXX0X__

(без значения)

.Нажмите Apply.

C / C ++ General -> Preprocessor Включить пути .. -> вкладка Providers: проверьте

CDT GCC Встроенные настройки компилятора

и для "Command toполучить спецификации компилятора ", добавьте флаг

-std=c++11

.Снимите флажок Поделиться.Нажмите Apply.

CDT Управляет записями настроек сборки, проверьте это тоже.Снимите флажки с двух других.Нажмите Apply.

Возвращаясь к вкладке Entries, GNU C ++ CDT, управляющей записями настроек сборки, вы должны увидеть добавленную запись

__GXX_EXPERIMENTAL_CXX0X__

.

Вот и все.При кодировании ввод

std::

теперь может автоматически завершать, например, класс потока, сборки должны работать нормально, и во время выполнения не должно быть

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

.

2 голосов
/ 09 марта 2016

Eclipse C / C ++ не распознает символ std::unique_ptr, даже если вы включили заголовок памяти C ++ 11 в свой файл.

Предполагая, что вы используете компилятор GNU C ++, я исправил следующее:

Проект -> Свойства -> Общие сведения о C / C ++ -> Пути включения препроцессора -> GNU C ++ ->Пользовательские настройки CDT

  1. Нажмите кнопку «Добавить ...»

  2. Выберите «Макрос препроцессора» в раскрывающемся меню

    Name: __cplusplus     Value:  201103L
    
  3. Нажмите Применить, а затем ОК, чтобы вернуться к своему проекту

  4. Затем перестройте свой индекс C ++: Проекты -> Индекс C / C ++ -> Восстановить

2 голосов
/ 23 марта 2015

Я не знаю, только ли это я, решение самого высокого ранга не работает для меня, моя версия eclipse - это просто обычная платформа eclipse, установленная с помощью sudo apt-get install eclipse в Ubuntu Но я нашел решение, которое принимает метод вместе как из решения с наивысшим рейтингом, так и из второго. То, что я сделал, чтобы заставить его работать, описано ниже (обратите внимание, что другие шаги, такие как создание проекта C ++ и т. Д., Для простоты игнорируются) *

Как только вы создали проект C ++

(1) C / C ++ Общее -> Пути и символы -> Символы -> GNU C ++. Нажмите «Добавить ...» и вставьте GXX_EXPERIMENTAL_CXX0X (добавьте и добавьте два подчеркивания) в поле «Имя» и оставьте поле «Значение» пустым.

(2) В C / C ++ Build (в настройках проекта) найдите препроцессор «Включить путь» и перейдите на вкладку «Поставщики». Отмените выбор всех параметров, кроме настроек компилятора CDT GCC. Затем снимите отметку «Поделиться настройками записи». Добавьте опцию -std = c ++ 11 в текстовое поле под названием Command, чтобы получить спецификации компилятора

После выполнения выше 2 и 2 только шагов, это работает, затмение способно разрешить unique_ptr, я не знаю, почему это решение работает, надеюсь, что оно может помочь людям.

...