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


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

15 203

15 ответов:

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

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

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

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

инструкция для 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 добавить -std=c++11

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

для проекта, созданного как: файл - >New - > Project - > C / C++ - > C++ Project

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

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.

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

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

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

этот раздел Вики сообщества включает в себя ответ Trismegistos;

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

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

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

C / C++ General - > препроцессор включает пути, макросы и т. д. - >перейдите на вкладку "провайдеры":

  • для" конфигурации "выберите" Release "(а затем "debug")

  • переключатель отключите все поставщики и просто выберите "CDT GCC встроенные настройки компилятора"

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

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

  • нажмите "Применить" и закрыть окно Параметры

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

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

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

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

  • на Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • добавить символ : __cplusplus со значением 201103L

для Eclipse CDT Kepler что работало для меня, чтобы избавиться от std::thread неразрешенных символов:

  1. перейдите в Настройки - >C / C++ - > Build - >Settings

  2. выберите вкладку обнаружение

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

  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.

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

это связано с __GXX_EXPERIMENTAL_CXX0X__ и это действительно для Eclipse Juno и CDT 8.x.

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

чтобы можно было построить с помощью stdc++11, нужно добавить определенный флаг для компилятора. Вы можете сделать это с помощью свойств проекта. Чтобы изменить свойства проекта RMB иProject properties или ALT + ENTER. Затем C / C++ Build - > Настройки -> настройки инструмента -> GCC C++ компилятор -> разное - > другие флаги. Put-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++ General - > пути и символы - > символы - > GNU C++. нажать кнопку add...- и мимо __GXX_EXPERIMENTAL_CXX0X__ (убедитесь, что добавить и добавить два подчеркивания) в "имя"и оставить" значение " пустым. И теперь это дополнительная часть, которую я хотел бы осветить в комментарии к первому ответу, перейдите: C / C++ General - > Препроцессор Включает Путь Макросы и т. д. - >Провайдеры, и выберите CDT Managed Build Setting Entries затем нажмите кнопку Применить и вернитесь на вкладку записи, под GNU C++ должны быть теперь CDT управляемые записи настройки сборки проверьте, если внутри есть определено __GXX_EXPERIMENTAL_CXX0X__ Если это -> применить и перестроить индекс вы должны быть в порядке на данный момент.

у меня тоже было несколько проблем (Ubuntu 13.04 64-бит, 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++ General - > пути и символы - > вкладка символы, выбран GNU C++, добавьте

__GXX_EXPERIMENTAL_CXX0X__

(значение отсутствует)

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

C / C++ General - > препроцессор включает пути.. -> Услуги поставщиков вкладка: проверьте

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

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

-std=c++11

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

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

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

__GXX_EXPERIMENTAL_CXX0X__

запись.

вот и все. Когда кодирование, ввод

std::

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

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

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

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

после того, как вы создали на C++ проект

(1) C/C++ General -> пути и символы -> символы -> GNU C++. нажать кнопку add..."и вставить GXX_EXPERIMENTAL_CXX0X (убедитесь, что добавить и добавить два подчеркивания) в "имя"и оставить" значение " пустым.

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

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

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

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

нажмите "Применить" и ЛАДНО.

спасибо,

парень.

  • щелкните правой кнопкой мыши проект и выберите "Свойства"
  • сборка C / C++ - > Настройки - > настройки инструмента - > компилятор GCC C++ - > разное - > другие флаги. Поместите -lm в конце текстового поля другие флаги и ОК.

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

чтобы получить поддержку 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. Он должен работать так, как ожидалось.

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++ указатель -> восстановить

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

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

затем я пошел, чтобы мой проект -> свойства -> С/C++ построить -> настройки -> компилятор gcc c++ и изменил команду от "G++" до "в/usr/местные/Бен/г++". Если вы решили не делать символическую ссылку, вы можете быть более конкретным.

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

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


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