Как включить поддержку 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 ответов:
нашел этой статья на форуме 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
неразрешенных символов:
перейдите в Настройки - >C / C++ - > Build - >Settings
выберите вкладку обнаружение
выберите CDT GCC встроенные настройки компилятора [общие]
добавьте-std=c++11 в поле" команда для получения спецификаций компилятора:", например:
${COMMAND} - E-P-v-dD - std=c++11 ${INPUTS}
- Ок и перестроить индекс для проекта.
добавлять
-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
нажмите на кнопку "Добавить... кнопка"
выберите "макрос" из выпадающего меню
Name: __cplusplus Value: 201103L
нажмите Применить, а затем ОК, чтобы вернуться к вашему проекту
затем перестройте индекс на 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 и редактировать их с разными пути, но я не уверен, что это будет делать.