it-swarm.com.ru

Как включить поддержку C++ 11/C++ 0x в Eclipse CDT?

Затмение 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 перестать жаловаться на подобные ошибки?

207
Nick

Я нашел это статью на форуме 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

219
Carsten Greiner

Инструкция для 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

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

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.

146
Trismegistos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Перейти к дорожкам и символам. В разделе «Символы» нажмите restore defaults, а затем примените. 


Заметки:

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

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

Благодаря пользователю Nobody в https://stackoverflow.com/a/13635080/1149664

110
Johan Lundberg

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

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

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

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

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

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

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

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

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

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

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

20
Andreas

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

  • Перейти к Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
  • Добавьте символ: __cplusplus со значением 201103L
15
Jerome

Для 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 Флаги были недостаточны для Kepler, однако этого было достаточно для более старых версий, таких как Helios.

11
user3348915

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

Он связан с __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 -> Препроцессор, включите макросы пути и т.д. -> Provider, и выберите CDT Managed Build Setting Entries, затем нажмите APPLY и перейдите вернуться на вкладку Entries, в GNU C++ теперь должен быть CDT Managed Build Setting Entries, проверять, есть ли внутри, определен ли __GXX_EXPERIMENTAL_CXX0X__, если это -> APPLY, и пересобрать индекс, с этим все должно быть в порядке.

5
ravwojdyla

У меня тоже было несколько проблем (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 ++. Нажмите Применить.

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

-pthread

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

-Wl,--no-as-needed

флаг тоже. Нажмите Применить.

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

__GXX_EXPERIMENTAL_CXX0X__

(неважно)

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

C/C++ Общие -> Препроцессор Включить пути .. -> Вкладка Провайдеры: проверка

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

и для "Команда, чтобы получить спецификации компилятора", добавьте 

-std=c++11

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

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

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

__GXX_EXPERIMENTAL_CXX0X__

запись.

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

std::

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

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

во время выполнения.

3
Ola Aronsson

Я не знаю, если это только я, решение с самым высоким рейтингом не работает для меня, моя версия 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 только шагов, он работает, Eclipse может разрешить unique_ptr, я не знаю, почему это решение работает, надеюсь, что оно может помочь людям.

2
doody1986

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++ -> Перестроить

1
Rubens Gomes

Для меня на Eclipse Neon я следовал Trismegistos здесь ответ выше , ДА Я также добавил дополнительный шаг: 

  • Перейдите в проект -> Свойства -> C++ General -> Препроцессор. Включите пути, макросы и т.д. -> Провайдеры -> Параметры встроенного компилятора CDT Cross GCC, добавьте флаг "-std = c ++ 11 "

Хит применить и ОК.

Ура,

Guy.

1
Guy Avraham

Чтобы получить поддержку C++ 14 в Eclipse Luna, вы можете выполнить следующие шаги:

  • В C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings добавьте "-std = c ++ 14"
  • В C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous добавьте "-std = c ++ 14"

Переиндексация вашего проекта и в конечном итоге перезапуск Eclipse. Это должно работать как ожидалось.

0
Jerome
  • щелкните правой кнопкой мыши по проекту и перейдите в «Свойства»
  • Сборка C/C++ -> Настройки -> Настройки инструмента -> Компилятор GCC C++ -> Разное -> Другие флаги. Поместите -lm в конце текстового поля других флагов и ОК.
0
Sameera Chanaka

Ни взлом, ни более чистая версия не работают на Индиго. Взлом игнорируется, а необходимые параметры конфигурации отсутствуют. Без видимой причины, сборка начала работать после того, как она не работала и не указала причину. По крайней мере, из командной строки я получаю воспроизводимые результаты.

0
Jerry Miller

У меня была похожая проблема с использованием Eclipse C++ 2019-03 для смешанного проекта C и C++, в котором использовались std :: option и std :: swap. То, что работало для меня, было этим. В проекте Свойства-> Сборка C/C++-> Настройки-> Настройки инструмента-> Кросс-компилятор G ++ удалите -std = gnu ++ 17 из Разное и поместите его в Диалект-> Другие флаги диалекта.

0
dc42

Я решил это таким образом на Mac. Я использовал Homebrew для установки последней версии gcc/g ++. Они попадают в/usr/local/bin с include в/usr/local/include.

Я записал CD в/usr/local/bin и сделал символическую ссылку из g ++ @ 7, что бы ни было просто g ++, потому что @ bit раздражает.

Затем я перешел в MyProject -> Свойства -> Сборка C/C++ -> Настройки -> Компилятор GCC C++ и изменил команду с «g ++» на «/ usr/local/bin/g ++». Если вы решили не делать символическую ссылку, вы можете быть более конкретным.

Сделайте то же самое для компоновщика.

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


Я думаю, не проверяя, что вы также можете зайти в Eclipse -> Properties -> C/C++ -> Core Build Toolchains и редактировать их с разными путями, но я не уверен, что это будет делать.

0
Joseph Larson