Разное

C clion: A Cross-Platform IDE for C and C++ by JetBrains

Содержание

поддержка проектной модели Makefile, больше C++20 и не только / Блог компании JetBrains / Хабр

Привет, Хабр!

У нашей команды выдалось очень насыщенное лето, результатами которого мы и спешим сегодня поделиться. Итак, встречайте новый релиз CLion 2020.2!

Коротко о том, что вошло в новую версию:

  • Поддержка проектной модели Makefile.
  • Последние обновления в CMake.
  • Новые возможности C++20: explicit(bool), назначенные инициализаторы (designated initializers), циклы for на основе диапазонов с инициализаторами.
  • Обновленный статический анализатор кода: анализ на висячие указатели (dangling pointers), поиск возможностей упрощения кода, поиск неиспользуемого кода, анализ возвращаемого значения функции, ограниченной концептом.
  • Юнит-тестирование: поддержка нового фреймворка doctest, новые возможности Catch3 и Google Test. А также упрощение сбора метрик покрытия кода.
  • Обновления в плагине PlatformIO для разработки встроенных систем.
  • Улучшения в поддержке систем контроля версий.
  • Улучшения производительности редактора.
  • Исправления в отладчиках.

Поддержка проектной модели Makefile

Отметив этой весной пятилетие CLion, мы тут же включились в активную доработку самой ожидаемой возможности в IDE — поддержки проектов на основе Makefile. До этого у нас был только сырой прототип, который мы давали попробовать в частном порядке самым смелым нашим пользователям. Благодаря им мы смогли проверить прототип на широкой выборке Makefile-проектов, исправить множество проблем в нем и понять текущие (надеемся, временные) ограничения нашего решения. Наша цель — позволить пользователям работать с проектом на основе Makefile в CLion со всеми умными возможностями IDE, такими как навигация, рефакторинги, статический анализ кода и другие.

Текущий подход вкратце выглядит так: CLion запускает команду make на вашем проекте с дополнительной опцией --just-print, чтобы сэкономить время на реальной сборке. Если CLion может успешно распарсить вывод команды, то проект открывается и все работает!

Сразу оговоримся, работа над поддержкой Makefile в CLion еще далека от завершения — известных ограничений и недоделок еще много. Самое заметное:

  • Не поддерживаются проекты, использующие libtool (CPP-19549), distcc и ccache (CPP-19305), и другие обертки, которые “скрывают” флаги компиляции из выдачи или вмешиваются в вывод команды make.
  • CLion пока не умеет работать с выводом non-GNU Makes (например, NMake, BSD) (CPP-18723).
  • Не поддерживаются проекты, которые отключают вывод имен директорий в процессе сборки, так что CLion не может определить, к каким именно файлам относятся те или иные команды сборки.

Но даже текущее решение уже позволяет открыть в CLion ядро Линукса или код сервера базы данных PostgreSQL. Если интересно, то текущий список проектов, на которых наш прототип работает (а так же некоторые проекты, где он не работает, с указанными проблемами) можно найти на этой странице.

Попробовать на своем проекте очень просто:

  1. Подготовить проект, чтобы получить Makefile для него (например, во многих случаях надо запустить ./configure, так как CLion пока что сам не умеет этого делать).
  2. Открыть проект через File | Open и указать директорию, которая содержит самый главный проектный Makefile или прямо сам этот файл. Подтвердить, что открыть хотите как проект.
  3. CLion уточнит, запустить ли Clean. Это нужно, чтобы вызов команды make подхватил все файлы, а не только последние изменения.
  4. Это, собственно, и все! Результат попытки загрузки проекта будет выведен в окно Build.

Вывод может содержать какие-то предупреждения, но если загрузка завершилась в целом успешно (около самой первой задачи должна быть зеленая отметка), то с проектом можно работать в CLion.

Настройки аргументов команды загрузки, тулчейн, используемый для загрузки, и другие опции можно найти в Settings/Preferences | Build, Execution, Deployment | Makefile:

Для запуска и отладки Makefile-приложений потребуется дополнительно создать конфигурации Makefile Application. При этом таргет можно будет выбрать из выпадающего списка — CLion подскажет, какие есть варианты:

В нашем блоге на английском языке можно найти больше информации о работе с проектами на Makefile в CLion. Также рекомендуем к просмотру короткое демо (на английском):

Последние обновления в CMake

Как показывает статистика, три самых популярных сейчас проектных модели среди разработчиков на C++, это CMake, msbuild и Makefile. И именно CMake возглавляет этот рейтинг уже три года и продолжает расти. Поэтому мы непрерывно обновляем забандленную в CLion версию CMake и работаем над поддержкой последних нововведений в самом CMake. В этот раз мы обновили версию до 3.17 и соответственно добавили поддержку двух новых полезных возможностей CMake:

  • С Ninja Multi-Config теперь возможно генерировать все конфигурации (а не только выбранную Debug или Release) при использовании Ninja генератора (включается через -G "Ninja Multi-Config"). CLion правда пока использует только одну конфигурацию, указанную в настройках профиля CMake для проекта. Но это ограничение текущего UI, которое мы планируем исправить в будущем.
  • CMake precompiled headers заслуживают большего внимания. Вообще, идея предкомпилированных заголовочных файлов (PCH) не нова и поддерживается компиляторами уже давно. CLion также умеет работать с PCH довольно давно. Теперь же можно не вспоминать флаги компилятора для PCH и не передавать их в CMake каждому конкретному компилятору по-своему, а просто добавить заголовочные файлы в PCH-переменные таргета через команду target_precompile_headers. CLion 2020.2 теперь умеет с таким работать:

Заслуживает внимания и возможность открыть CMake проект в CLion из директории с результатом генерации CMake, теперь не только для генератора Makefile, но и для любого другого! Экономьте время — открывайте уже собранные проекты в CLion без перезапуска команды CMake на проекте.

С++20

А вы знаете, что, по нашим данным, в этом году уже 12% разработчиков на C++ используют стандарт C++20?! Поэтому мы, конечно, работаем активно над поддержкой новых возможностей в CLion. Но давайте сначала вспомним, что у нас вообще с языковым движками в CLion.

Итак, на текущий момент их два — встроенный на основе Java/Kotlin и довольно новый на основе Clangd, соответственно на С++ (для его разработки мы пользуемся CLion). Сейчас все усилия вкладываются в движок на основе Clangd. Он кажется хорошей перспективой, хотя действия на всем проекте (вроде рефакторингов) на нем пока делать нельзя — тут даже не идеальный и местами медленный Java-based движок выигрывает за счет всяких специфических оптимизаций и отложенных резолвов, ну и, конечно, за счет наличия кэша символов, необходимого для рефакторингов.

Но у Clangd есть один очень большой плюс — над поддержкой последних стандартов C++ в Clang там работает все сообщество, ведь проект открытый. Это, конечно, не означает, что нам совсем ничего не надо делать — эту поддержку все равно потом надо адаптировать под нужды CLion. Но это уже проще, чем писать поддержку возможностей C++ с нуля! А еще на основе поддержки в Clang можно писать свой специфический анализ или делать какие-то специальные фичи (так мы, например, сделали автодополнение для Concept-ов несколько релизов назад).

Мы убедились, что последнее обновление Clangd-движка, пришедшее с LLVM, стабильнее ведет себя на коде на C++20, да и в целом по нашей встроенной статистике Clangd-движок стал стабильнее. Поэтому убрали из настроек возможность полностью отключать Clangd-движок. Зато добавили в Settings/Preferences | Languages & Frameworks | C/C++ | Clangd информацию о той ревизии, с которой собран наш движок. Теперь вы знаете, чего ожидать от него в плане поддержки C++ и анализа встроенного Clang-Tidy:

Кстати, в нашем онлайн-хелпе есть отличная статья со сравнительным анализом двух движков в плане поддержки возможностей C++.

А теперь о том, что же собственно добавилось из поддержки C++20:

  • Автодополнение для ключевых слов C++20: char8_t, consteval и constinit, co_await, co_return, и co_yield.
  • Автодополнение для полей из базового класса в назначенных инициализаторах:

  • Конструкция explicit(bool) теперь правильно подсвечивается, в ней работают подсказки имен, навигация и рефакторинги:

  • Для циклов for на основе диапазонов с инициализаторами заработал рефакторинг Rename для переменных цикла.

Статический анализатор кода

В прошлом релизе мы перевели самый “тяжелый” наш анализ — анализ потока данных (Data Flow Analysis) — на движок на базе Clangd. Это сделано в основном для улучшения производительности. Но, как часто бывает, при рефакторинге было найдено много проблем и неаккуратностей. Так что мы в релизе 2020.2 продолжили улучшать этот анализ и исправлять баги в нем:

  • Заметнее всего, наверное, был улучшен анализ на неиспользуемый код.
  • На DFA также переехали такие вещи как Simplify code и Loop condition is never updated. Для первого в настройках теперь можно настраивать отдельно разные случаи, которые он умеет находить:

    К тому же, он теперь более аккуратно работает в случае макросов и шаблонов:

    Второй же анализ позволяет находить потенциально бесконечные циклы из-за того, что условие цикла не обновляется внутри цикла. Знатоки могли бы заметить, что аналогичный анализ есть и в Clang-Tidy (clang-tidy:bugprone-infinite-loop), но там он не работает для циклов с точками выхода и зачастую ложно-срабатывает для лямбд и референсов. В CLion анализ работает в данных случаях аккуратно:

  • В CLion появился анализ на висячие указатели (dangling pointers)! Несмотря на некоторые ограничения (например, он работает только в локальном скоупе), он все равно очень полезен:

  • Для кода, использующего Concepts из C++20, появился анализ и квик-фикс на добавление концепта к объявлению переменной типа auto, в которую присваивают результат выдачи ограниченной концептом функции:

Окно результатов статического анализа

В этом релизе всеми любимый инспектор Гектор (которого некоторые наши пользователи даже тщетно пытались рассмешить) превратился в новый Inspection Widget, расположенный в правом верхнем углу области редактора. Теперь именно там находятся опции настройки уровня подсветки (от показа всех проблем до полного отключения анализатора кода), а при клике открывается окно результатов статического анализа для данного файла:

Юнит-тестирование

Уже упомянутое здесь не раз исследование показывает, что 34% разработчиков на С++ не пишет никаких юнит-тестов. Хочется верить, что взамен они ведут тестирование какими-то другими способами. Отчасти, проблема в том, что в C++ нет ни стандартной проектной модели, ни стандартного менеджера зависимостей, а значит добавить фреймворк для юнит-тестирования в свой проект ох как не просто. Но сейчас становятся особо популярны так называемые header-only фреймворки, которые подключить в свой проект легко — добавил заголовочный файл и пиши себе тесты. А мы со своей стороны в IDE стараемся поддержать как можно больше опций. В этом релизе к набору из Google Test, Catch, Boost.Test еще добавили doctest. У нас, кстати, некоторое время назад был гостевой блог пост от его автора, где Viktor рассказывал, в чем преимущества данного фреймворка.

Поддержка в CLion включает обычные вещи:

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

Поддержка Google Test и Catch3 также обновилась:

  • Для Catch3 появилась поддержка шаблонных тестов.
  • А для Google Test поддержка макроса GTEST_SKIP(), который может быть очень полезен, если хочется уметь пропускать какие-то тесты, например в специфических окружениях.

Небольшое обзорное видео про улучшения в поддержке юнит тестирования от нашего адвоката (кстати, автора фреймворка Catch/Catch3):

Предупреждая ваши вопросы про CTest: сделать его чуть сложнее, потому что это не “очередной” фреймворк, а некоторый уровень абстракции для запуска чего угодно в виде теста. Но мы планируем некоторую интеграцию уже в 2020.3!

А также

Самое интересно, пожалуй, обсудили, теперь коротко обо всем остальном. Надо было с этого начать, но CLion 2020.2 включает множество небольших, но важных улучшений производительности редактора и исправлений подвисаний редактора. Одно из таких улучшений, например, это вставка обратного слэша при нажатии Enter внутри определения макроса. Казалось бы, как это помогает производительности редактора? Дело в том, что скорее всего новая строка — это часть определения текущего макроса, а вставка обратного слэша позволяет избежать ненужного репарсинга кучи кода, а значит и тормозов редактора.

Помимо этого:

  • Для разработчиков встроенных систем добавилось несколько важных интеграционных изменений в плагине для PlatformIO — генерация большего количества конфигураций запуска и отладки, подсветка в конфигурационных platformio.ini файлах и создание необходимых проекту профилей CMake автоматически.
  • Как обычно, из платформы IntelliJ приехало много улучшений в поддержке систем контроля версий. Из значимого: расширенные возможности по работе с GitHub Pull Requests и поддержка Git на WSL2 (то есть при работе с проектами на WSL2, CLion умеет теперь использовать Git оттуда).
  • По отладчикам в 2020.2 удалось сделать меньше, чем планировали. В основном, все большие задачи отодвинуты на 2020.3 (отладка от имени root-пользователя, отладка core-дампов). Но в этой версии мы проапгрейдили забандленную версию GDB до 9.2, а также обновили GDB STL pretty printers. Множество улучшений, как функциональных, так и по производительности и стабильности, было сделано в нашем отладчике на базе LLDB для тулчейна Microsoft Visual C++.

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

Команда CLion

The Drive to Develop

10 советов для продуктивности в CLion, кроссплатформенной С/С++ IDE

Всем привет!

До выпуска нашей первой группы курса «Разработчик C++» остались считанные дни. По итогам неплохо поработали напильником и надфилем над курсом: перекомпоновали домашние задания, обновили версию язык и ещё разное по мелочи. Ну, а пока продолжаем нашу традицию по интересным и полезным материалам.

Поехали.

Судя по собственному опыту разработки, многие разработчики C/C++ пренебрегают идеей, что IDE может сделать их работу продуктивней. Ведь что может быть лучше, чем простые и быстрые Vim или Emac. Что ж, позвольте продемонстрировать. Эти 10 советов CLion поднимут вас на новый уровень продуктивности, помогут сфокусироваться на важных и сложных задачах, в то время как IDE решит за вас рутинные задачи.

Прежде чем начать, познакомимся с CLion, новой кроссплатформенной IDE для разработки на C и C++, созданной JetBrains. Она изначально поддерживает C и C++, включая стандарт C++11 (с некоторыми небольшими ограничениями), libc++ и Boost. Она корректно обрабатывает макросы и шаблоны, а также работает с GCC или Clang (при работе с Windows понадобится или MinGW/MinGW-w64, или Cygwin), GDB, как встроенный дебаггер, и CMake, как система сборки и проектная модель. В дополнении к C/C++ также можно пользоваться JavaScript, XML, HTML и CSS на том же уровне редактирования кода, используя, например, подсветку синтаксиса, анализ, автодополнение, навигацию и рефакторинг.

1. Умное автодополнение знает, что вам нужно

В первую очередь, нам всем нужен редактор. Автодополнение кода крайне важно: мы просто начинаем вводить символ (переменная, функция, тип, имя класса) и редактор показывает нам список подходящих предложений. Это просто, но действительно ли нам нужны все те опции, описанные в примере ниже?

Зачастую нам нужно только что-то с типом idPlayer *. И именно это показывает умное автодополнение CLion! Она автоматически фильтрует предложения, основываясь на контексте кода:

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

2. Используйте сразу, определяйте позднее

Когда появляется гениальная идея, не хочется тратить время на скучные рутинные задачи. Предположим, вы использовали функцию, которая до сих пор не была имплементирована или даже определена. CLion выделяет ее красным. Нужно ли сразу задержаться для имплементации функции? Вовсе нет! Попросите CLion сгенерировать заглушку и вернитесь к этому моменту позднее. Просто нажмите Alt+Enter:

Объявление и определение мгновенно появятся в вашем коде:

Работает аналогичным образом для переменных и имен классов:

3. Live template’ы для ваших любимых или наиболее используемых фрагментов кода

Как получить цикл или итерацию по диапазону (в стиле C++11) просто напечатав несколько символов? Введите for и нажмите Tab, чтобы получить цикл; или введите iter или itit, а затем нажмите Tab:

При ближайшем рассмотрении окажется, что в Clion можно создавать пользовательские Live Template’ы или “Surround With” шаблоны (которые быстро заворачивают выбранный код в конструкт). Покажем пример, как быстро получить класс, с наследованием из другого существующего класса:

После добавления нового “cp” шаблона, можно ввести cp в редакторе:

Описание шаблона можно сразу увидеть в выпадающем списке автодополнения. Шаблон расширяется при нажатии Tab. Теперь можно добавить новое название класса, затем выбрать родительский класс и модификатор для него из списка автодополнения:

Вуаля! Новый класс готов.

Конечно, можно сгенерировать более сложные шаблоны, включая переменную $SELECTION$ для получения “Surround With” шаблона.

4. Следуйте иерархическому виду

Разработчики читают код значительно чаще, чем пишут его. Перед тем, как добавить новый код или обновить существующий, проводится глубокое и детальное исследование существующей кодовой базы. (Только если вы не начинаете проект с нуля, что редкость.) Во многих случаях продуктивность зависит от того, как быстро можно пробраться сквозь кодовую базу.

Для таких случаев CLion предоставляет широкий спектр возможностей навигации по коду:

  • используйте стандартные инструменты goto объявления/определения;
  • быстро переходите к соответствующему символу, недавним файлам или месту, которые вы правили последним;
  • ищите любой класс, файл или символ по названию;
  • используйте контекстный поиск с Find Usage;
  • перемещайтесь по текущему файлу с использованием вида File Structure;
  • извлекайте пользу из нескольких иерархических видов, включая Call Hierarchy, Type Hierarchy и Imports Hierarchy.

Call Hierarchy — мой любимый. Он позволяет увидеть в деталях весь стек вызовов с ветками. Выглядит очень просто, не правда ли? Одним кликом вы можете переместиться в нужное место в редакторе, а воспользуясь автопрокруткой в Source, сделать процесс еще быстрее:

5. Меняйте порядок и добавляйте параметры — IDE позаботится об использовании

Рефакторинг — мощный процесс, который помогает улучшить код, сделать его чище и удобней. Некоторые IDE предлагают ограниченное количество способов его автоматизации. В CLion их очень много — от простых и популярных Rename до сложных Change Signature, Extract Function или Class, Inline и многие другие. Можете положиться на CLion, корректность кода сохранится и при внесении изменений рефакторинга.

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

Чтобы добавить новый параметр в эту функцию, я воспользуюсь рефакторингом Change Signature:

К слову, добавлять новый тип параметра в этом окне очень просто благодоря автодополнению кода. После того, как я нажимаю “Refactor”, Clion обновляет подпись и все использования, заменив значение по умолчанию для данного типа, которое в этом случае равно nullptr:

А что, если я решу упорядочить параметры во время Change Signature? Конечно же, их порядок обновится в соответствии со всеми использованиями:

6. Извлекайте все, с большим количеством опций

Извлечение части кода в отдельную функцию — популярный метод рефакторинга, но что насчет других? Например Extract Typedef, Define, Variable, Parameter или даже Subclass? Опыт их использования в CLion улучшается благодаря небольшим, но полезным деталям. Например, вы можете изменить все вхождения (если их больше одного) при извлечении константы или переменной; объявить константу или параметр статическими; использовать auto тип при извлечении переменной; и так далее и тому подобное:

7. Неиспользуемый код? “=” в условии? Не проблема!

Следуя закону Мерфи для компьютеров, в каждой нетривиальной программе есть хотя бы один баг. Но давайте сделаем все возможное и исправим как можно больше из них. Пока мы стараемся локализовать и, надеюсь, пофиксить баги, CLion постоянно мониторит ваш код на наличие потенциальных ошибок. Любая подозрительная часть кода подчеркивается в редакторе, и предлагаются опции возможных быстрых фиксов. Для их просмотра достаточно нажать Alt+Enter. IDE также проводит полный Data Flow Analysis для выявления неиспользуемого и недоступного кода:

CLion не пропустит и вездесущие ошибки C/C++, например, “=” в условии:

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

8. Простая отладка с возможностью смотреть значения переменных прямо в редакторе!

Ключевое преимущество IDE над простым текстовым редактором — опыт дебаггинга. Конечно можно запустить отдельный процесс дебаггинга, но отладка внутри IDE экономит много времени и предоставляет дополнительный полезный функционал.

CLion интегрирует GDB бэкенд, предоставляя все необходимое в интерфейсе и

улучшая опыт отладки некоторыми крайне полезными инструментами. К примеру, каждый раз, когда вы вводите имя переменной для просмотра или выражение для оценки, можно воспользоваться преимуществами автодополнения кода. В отдельном окне инструмента показаны все детали текущего состояния программы. А вот и вишенка на торте: во время отладки IDE показывает значения переменных рядом с их объявлением:

9. Передумали во время отладки? Не перезапускайте — сразу меняйте значения переменных!

Значение отладки заключается в понимании данных и контроле их перемещения в программе. Иногда нужно проверить несколько значений переменной, например, проследить отдельную ветвь выполнения. Не нужно тратить драгоценное время на перезапуск — сразу поменяйте значения в текущей сессии отладки:

Теперь мы можем продолжить ту же самую сессию, но с новым присвоенным значением y, равным 55. Как было замечено ранее, IDE показывает значения переменной рядом с их объявлением в редакторе, подчеркивая примененные изменения:

10. Все необходимые инструменты на борту — Не нужно переключаться!

IDE расшифровывается как Integrated Development Environment (Интегрированная Среда Разработки), ее использование означает, что в работе вам больше не потребуется переключаться между несколькими инструментами, например, отдельным vcs приложением, баг-трекером в браузере или даже терминалом. Весь этот инструментарий уже встроен в CLion IDE, чтобы вы могли сфокусироваться на коде с минимумом отвлечений.

Опробуйте эти советы в CLion и убедитесь, что они помогут вам стать эффективней и продуктивней!

THE END

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

Настройка IDE Clion и Cmake для работы с STM32 и C++ / Хабр

Перед примером моей настройки немного лирики.

Давно хотел попробовать себя в микроконтроллерах, вернее были идеи с их использованием, которые очень хотелось реализовать. Сначала начал с PIC32 — огонь контроллеры. Так получалось, что поначалу и коротил их порты, и с питанием завышал — неубиваемые (не совсем конечно, порт правда однажды сгорел, но сам контроллер продолжал работу). IDE MplabX неплоха, подкупал графический блок с отображением занимаемой RAM/Flash на выбранном МК — удобно, но сам NetBeans как IDE это жесть, ну не удобно ни разу после Idea. Но проблема была не в этом — как потом оказалось, PIC’и тяжело достать, мало кто их возит, а если и возит, то по относительно высокой цене.

Дальше решил копнуть в сторону STM32 — они в больших количествах, за базовую периферию просят не много, но главное — это доставаемость. (Но кодогенератор STM’а хуже Microchip’a — весь файл загажен комментами и функциями, это конечно сильно огорчило. У Microchip’а все сгенеренные функции вынесены в отдельные файлы и main.c практически чист — прелесть).
(UPD: вот тут признаюсь ошибался, спасибо golf2109, он подсказал, что от заваливания комментами и функциями файла main.c можно избавиться, достаточно включить в настройках опцию для вынесения сгенерированного кода в отдельные файлы, но я все же в недоумении, почему это не дефолтная настройка, вроде логично было бы)

Теперь об IDE для STM32.


Попробовал хваленый Keil — конечно получше блокнота, но ужасно не удобный (ни нормальных подсказок, ни нормального форматирования, после Idea в общем не то пальто, особенно я так и не понял как создавать пакеты, почему нельзя просто в окошке ткнуть создать пакет и продолжить — матюгаться хочется).

Потом попробовал CooCox — гораздо лучше и приятнее интерфейс, хорошо настраивается форматирование (прям порадовала настройка переноса параметров в методах, да и другие настройки очень кстати), но опять же не хватало многих плюшек от Idea и опять же проблемы с организацией пакетов.

Clion почти та же Idea только для C/C++ и сразу захотелось ее прикрутить, но как оказалось довольно проблематично (особенно для человека, который с плюсами-то не силен, особенно со всякими сборщиками и компиляторами, парой сотен опций компиляции). Начал с блога JetBrains. Довольно подробно описано, но это для прошлых версий STM32CubeMX, в новой немного поменялась структура каталогов, в результате чего я некоторое время не понимал почему не компилится. Потом разобрался — изменил пути, для cortex-m3 убрал параметры -mfpu. Но опять не компилился. Дальше оказалось, что я не тот компилятор установил, вернее просто скачал его, но не указал путь к нему в файле сборки (ну сложновато поздно вечером думать).

Главное в Clion’е поставить галочку в настройках ‘Automaticaly Reload Cmake Project on Edit’ (Settings -> Build, Execution, Deployment -> Cmake), тогда после правок не нужно ничего очищать вручную.

Еще из изменений — дебаггер, упомянутый в блоге, переименовали в Ozone, его еще не тестил, позже отпишусь.

И последняя проблема, сверлившая мозг. Очень хотелось ООП, но не компилился проект если я добавлял C++ файл, куча ошибок с не найденными функциями (например, _exit, _sbrk и пр.). Здесь проблем было 2:

  • в файле CMakeLists.txt в блоге JetBrains не был выставлен флаг CXX в директиве project (нужен для файлов C++)
  • для исправления ошибок в файле из блога не хватало опций -specs=nosys.specs -specs=nano.specs после опции -gc-sections. Они как раз создают эти прототипы или наоборот игнорят эти методы (тут не могу точно сказать)

После этого проект нормально стал компилиться и размер его стал в пределах нормы (без опции -specs=nano.specs размер был в 10 раз больше для пустого проекта примерно 110 кб., с опцией — 18 кб.)

Итак, что я сделал:

  1. ставим Clion
  2. заходим в настройки (Settings -> Build, Execution, Deployment -> Cmake) и ставим галочку ‘Automaticaly Reload Cmake Project on Edit’
  3. здесь же вписываем в поле Cmake options параметр -DCMAKE_TOOLCHAIN_FILE=STM32L1xx.cmake и в поле Generation path ставим build (если поменять, то в файлах CMakeLists.txt и STM32L1xx.cmake нужно его тоже будет поменять)
  4. ставим ARM компилятор (здесь брал)
  5. импортируем проект (который предварительно сгенерировали в STM32CubeMx), говорим, что можно создать CMakeLists.txt
  6. отсюда или из моего репозитория копируем содержимое CMakeLists.txt в созданный в Clion’e и добавляем файл STM32L1xx.cmake (можно обозвать как угодно)
  7. в STM32L1xx.cmake правим имя проекта в директиве project и можно убрать CXX если не нужен C++
  8. заменить в файле CMakeLists.txt в директиве add_definitions(-DSTM32L100xC) на свой контроллер
  9. для надежности можно сделать: Tools -> Cmake -> Reset Cache and Reload project и потом Tools -> Cmake -> Reload Cmake Project
  10. теперь можно сбилдить

Файл CMakeLists.txt

project(Skeleton C CXX ASM)
cmake_minimum_required(VERSION 3.5.0)

add_definitions(-DSTM32L100xC)

set(FREERTOS_DIR Middlewares/Third_Party/FreeRTOS/Source/)

file(GLOB_RECURSE USER_SOURCES "Src/*.c")
file(GLOB_RECURSE HAL_SOURCES "Drivers/STM32L1xx_HAL_Driver/Src/*.c")
file(
    GLOB_RECURSE
    FREERTOS_SOURCES
    "${FREERTOS_DIR}/*.c"
    "${FREERTOS_DIR}/CMSIS_RTOS/*.c"
    "${FREERTOS_DIR}/portable/GCC/ARM_CM3/*.c"
)

add_library(
    CMSIS
    Src/system_stm32l1xx.c
    startup/startup_stm32l100xc.s
)

include_directories(Inc)
include_directories(Src/gps/parser/nmea)
include_directories(Drivers/STM32L1xx_HAL_Driver/Inc)
include_directories(Drivers/CMSIS/Include)
include_directories(Drivers/CMSIS/Device/ST/STM32L1xx/Include)

include_directories(${FREERTOS_DIR})
include_directories(${FREERTOS_DIR}/CMSIS_RTOS)
include_directories(${FREERTOS_DIR}/include)
include_directories(${FREERTOS_DIR}/portable/GCC/ARM_CM3/)
include_directories(${FREERTOS_DIR}/portable/GCC/MemMang)

add_executable(${PROJECT_NAME}.elf ${USER_SOURCES} ${HAL_SOURCES} ${LINKER_SCRIPT} ${FREERTOS_SOURCES})

target_link_libraries(${PROJECT_NAME}.elf CMSIS)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.map")
set(HEX_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.bin)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE} \nBuilding ${BIN_FILE}")

Файл STM32L1xx.cmake:

INCLUDE(CMakeForceCompiler)

SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_SYSTEM_VERSION 1)

# Specify the cross compiler. arm-none-eabi-gcc and arm-none-eabi-g++ are full path required
CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU)
CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU)

SET(LINKER_SCRIPT ${PROJECT_SOURCE_DIR}/STM32L100RCTx_FLASH.ld)
SET(COMMON_FLAGS "-mcpu=cortex-m3 -O2 -mthumb -ffunction-sections -fdata-sections -g -fno-common -fmessage-length=0")
SET(CMAKE_CXX_FLAGS_INIT "${COMMON_FLAGS} -std=c++11")
SET(CMAKE_C_FLAGS_INIT "${COMMON_FLAGS} -std=gnu99")
SET(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,-gc-sections -specs=nosys.specs -specs=nano.specs -T ${LINKER_SCRIPT}")

Работать стало приятно, но пока заливаю прошивку через STM’овскую утилиту, позже попробую накрутить OZONE. На вопросы отвечу (если смогу).

Как настроить Clion для компиляции и запуска

Я просто скачать Clion от https://www.jetbrains.com/ потому что я просто обожаю всю их продукцию.

однако у меня возникли проблемы с его правильной конфигурацией, отбросьте тот факт, что я пытаюсь, я не могу скомпилировать и запустить свое приложение (простой hello world one )

когда я пытаюсь запустить приложение, оно ссылается на «Редактировать конфигурацию», поэтому я добавил новое приложение и теперь проблема.

  1. я не могу указать цель Единственное, что я могу сделать, это установить «все цели»
  2. я не могу указать конфигурацию (все учебники, которые я нашел, имеют «отладка или запуск» здесь)
  3. исполняемый? Путь к gcc должен быть здесь? ( C:\MinGW\bin\gcc.exe)

конфигурация Rest, похоже, не требуется.

Мой CMakeList.тхт выглядит так:

cmake_minimum_required(VERSION 3.3)
project(test)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES test.c test.h)
add_executable(test ${SOURCE_FILES})

Я пытаюсь выполнить это с «все цели», а также попытаться setupt выполнимый. Все, но я не могу заставить его работать.

здесь кто-нибудь, у кого были эти проблемы раньше и может посоветовать?
Спасибо

3 ответов


я столкнулся с такой же проблемой с CLion 1.2.1 (на момент написания этого ответа) после обновления Windows 10. Он работал нормально, прежде чем я обновил свою ОС. Моя ОС установлена на диске C:\, а CLion 1.2.1 и Cygwin (64-бит) установлены на диске D:\.

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

КОРОТКИЙ ОТВЕТ: (должно быть похоже на MinGW тоже, но я не пробовал это):

  1. установить Cygwin с GCC, G++, GDB и CMake (необходимые версии)
  2. добавить полный путь к каталогу Cygwin ‘ bin ‘ в Windows переменные среды
  3. перезапустите CLion и проверьте «настройки» — > «сборка, выполнение, развертывание», чтобы убедиться, что CLion взял правильные версии Cygwin, make и gdb
  4. Регистрация конфигурация проекта (‘Run’ — > ‘ Edit конфигурация»), чтобы убедиться, что ваше имя проекта появляется там, и вы можете выбрать параметры в полях «цель», «конфигурация» и «исполняемый файл».
  5. построить а то выполнить
  6. наслаждайтесь

ОТВЕТ:

Ниже приведены подробные шаги, которые решили эту проблему для меня:

  1. удалить / удалить предыдущую версию Cygwin (MinGW в вашем дело)

  2. убедитесь, что CLion обновлен

  3. запустите Cygwin setup (x64 для моей 64-разрядной ОС)

  4. установите по крайней мере следующие пакеты для Cygwin:

    gcc
    g++
    make
    Cmake
    gdb

    Убедитесь, что вы устанавливаете правильные версии вышеуказанных пакетов, которые требуются CLion. Вы можете найти необходимые номера версий в разделе быстрого запуска CLion (я не могу опубликовать более 2 ссылок, пока у меня не будет больше репутации точки.)

  5. затем вам нужно добавить Cygwin (или MinGW) в переменную среды Windows с именем ‘Path’. Вы можете Google, как найти переменные среды для вашей версии Windows

[на Win 10 Щелкните правой кнопкой мыши на «этот ПК» и выберите Свойства -> расширенные Системные настройки -> переменные среды… — >в разделе «системные переменные» — > найти «путь» — > нажмите «Изменить»]

  1. добавить папка » bin » для переменной Path. Для Cygwin я добавил:
    D:\cygwin64\bin

  2. запустите CLion и перейдите в » либо из «экрана приветствия», либо из файла — > настройки

  3. выберите ‘Сборка, Выполнение, Развертывание’ а затем нажмите на кнопку ‘Toolchains’

  4. код ‘среда’ должен показывать правильный путь в каталог установки Cygwin (или MinGW)

  5. на ‘CMake исполняемый файл’ выберите ‘используйте комплект CMake x.X. x’ (3.3.2 в моем случае на момент написания этого ответа)

  6. ‘Debugger’ показали мне говорит ‘Cygwin GDB GNU gdb (GDB) 7.8’ [слишком много gdb в этой строке ;-)]

  7. ниже есть галочка для всех категорий и также должен отображаться правильный путь к ‘make’, ‘C compiler’ и ‘компилятор C++’

характеристики:
проверьте все пути к компилятору, make и gdb

  1. теперь переходим к ‘Run’ — > ‘Edit configuration’. Вы должны увидеть свое имя проекта на левой боковой панели и конфигурации справа сторона

характеристики:
Проверьте конфигурацию для запуска проекта

  1. в окне консоли не должно быть ошибок. Вы увидите, что ‘Run’ — > ‘Build’ сейчас

  2. создайте свой проект, а затем запустите проект. Вы должны увидеть в окне терминала

надеюсь, что это помогает! Удачи и наслаждайтесь CLion.


Я встретил некоторые проблемы в Clion и, наконец, я решил их. Вот некоторый опыт.

  1. скачать и установить MinGW
  2. пакет G++ и gcc должен быть установлен по умолчанию. Используйте менеджер установки MinGW для установки mingw32-libz и mingw32-make. Вы можете открыть MinGW installation manager через C:\MinGW\libexec\mingw-get — … exe этот шаг является самым важным шагом. Если Clion не может найти make, компилятор C и Компилятор C++, перепроверьте менеджер установки MinGW, чтобы сделать каждый необходимый пакет установлен.
  3. в Clion, открыть файл->настройки->сборки,выполнения,развертывания->наборы. Установите MinGW home в качестве локального файла MinGW.
  4. Начните свой «Привет Мир»!

вы также можете использовать компилятор Microsoft Visual Studio вместо Cygwin или MinGW в среде Windows в качестве компилятора для CLion.

просто перейдите, чтобы найти действия в справке и введите «реестр» без » и включите CLion.включить.индекса MSVC
Теперь настройте toolchain с помощью компилятора Microsoft Visual Studio. (Вам нужно скачать его, если он еще не загружен)

перейдите по этой ссылке для более подробности:
https://www.jetbrains.com/help/clion/quick-tutorial-on-configuring-clion-on-windows.html

0

автор: anant vikram singh


Как править в CLion код любых проектов на С++, даже тех, в которых не используется CMake

Злые языки говорят, что CLion подходит только для проектов, использующих CMake. Что даже проекты на CMake он может индексировать 12 часов, а потом упасть с out of memory. А если каким-то чудом CLion не упадет, то будет адски тормозить и подсвечивать весь код красным. Что единственной нормальной IDE для C++ якобы был и во веке веков останется Visual Studio. Сегодня мы с вами убедимся, что к таким выводам люди приходят не от большого ума, и что за пять минут несложных рассуждений в CLion можно успешно открыть любой проект — неважно насколько большой и используется ли в нем CMake.

Задумаемся ненадолго, что вообще представляет собой CMake? В сущности, это тот же make, только кроссплатформенный. То есть, в отличие от make, CMake не привязывается к компилятору, ОС, и так далее. Отсюда и название, а вовсе не от того, что CMake используется для C/C++. Поверх этого еще накручен поиск некоторых пакетов по их названию, но это для нас уже не так важно, так как реализуется на скриптах, идущими в комплекте с CMake. А раз идея та же, что и у make, значит по сути CMake задает, какие в проекте есть файлы исходного кода, где искать заголовочные файлы, и как из них получить исполняемые файлы.

Как это знание поможет нам использовать CLion для произвольного проекта? Да очень просто — нам же всего-то нужно сообщить CLion, какие файлы он должен проиндексировать. Сделать это можно, написав незамысловатый генератор файла CMakeLists.txt вроде такого:

#!/usr/bin/env python

# cmakegen.py
# (c) Aleksander Alekseev 2015
# http://eax.me/

import sys
import os
import re

include_dirs = set()
source_files = set()

def recursive_search(path):
    # print(path)
    for file in os.listdir(path):
        if (file == «.») or (file == «..»):
            continue

        full_name = os.path.join(path, file)
        if os.path.isdir(full_name) and not os.path.islink(path):
            recursive_search(full_name)

        if re.search(«\\.(c|cpp|cxx)$», file) is not None:
            source_files.add(full_name)
        elif re.search(«\\.(h|hpp)$», file) is not None:
            include_dirs.add(path)

if len(sys.argv) < 2:
    print(«Usage » + sys.argv[0] + » <path>»)
    sys.exit(1)

start_path = sys.argv[1]
recursive_search(start_path)

print(«cmake_minimum_required(VERSION 2.8)»)
print(«project(dummy_project)»)

skip_chars = len(start_path) + 1

for dir in sorted(include_dirs):
    print(«include_directories(» + dir[skip_chars:] + «)»)

print(«add_executable(dummy_executable»)
for file in sorted(source_files):
    print(»  » + file[skip_chars:])
print(«)»)

Берем какой-нибудь проект. В том, что я взял для эксперимента, было более миллиона строк кода на C++. Генерируем приведенным скриптом на Python файл CMakeLists.txt, открываем проект в CLion, пару минут ждем окончания первой индексации — и вуаля!

Все автодополнения и переходы к определениям работают, вся документация и подсказки по аргументам отображаются, переименования методов и переменных отрабатывают, и так далее. Если IDE все равно подсвечивает что-то красным, можно понизить highlighting level (кликаем по мужику в каске в правом нижнем углу) или перевести IDE в power save mode. Также может потребоваться немного подправить руками сгенеренный CMakeLists.txt, тут все зависит от специфики вашего проекта.

Описанный прием может иметь смысл использовать не только в проектах, не использующих CMake, но и в проектах, в которых используется старая версия CMake, например, 2.4. Так как CLion использует более новый CMake, а где-то между версиями в CMake ломали обратную совместимость, то CLion может, к примеру, уходить в бесконечную рекурсию на старых проектах, заодно отжирая весь хип.

Конечно, компилировать и отлаживать проект из IDE описанный прием не позволяет, но зато в нашем распоряжении становится мощнейшее средство редактирования кода!

Дополнение: В комментариях отмечают, что CLion имеет функционал под названием Import Project from Sources. Он действительно есть, делает нечто похожее, но работает крайне скверно. Из сгенерированного CMakeList.txt CLion не может найти половины инклудов. В результате все исходники подсвечиваются красным цветом, ад и погибель.

Метки: C/C++, Python.

поддержка проектной модели Makefile, больше C ++ 20 и не только / Блог компании JetBrains / Хабр

Привет, Хабр!

У нашей команды выдалось очень насыщенное лето, результаты которого мы и спешим сегодня поделиться. Итак, встречайте новый релиз CLion 2020.2!

Коротко о том, что вошло в новой версии:

  • Поддержка проектной модели Makefile.
  • Последние обновления в CMake.
  • Новые возможности C ++ 20: явный (bool) , назначенные инициализаторы (назначенные инициализаторы), циклы для на основе диапазонов с инициализми.
  • Обновленный статический анализатор кода: анализ на висячие указатели (висячие указатели), поиск возможностей упрощения кода, поиск неиспользуемого кода, анализ возвращаемых значений функций, ограниченным.
  • Юнит-тестирование: поддержка нового фреймворка doctest, новые возможности Catch3 и Google Test. А также упрощение сбора метрик покрытия кода.
  • Обновления в плагине PlatformIO для разработки встроенных систем.
  • Улучшения в поддержке систем контроля версий.
  • Улучшения производительности редактора.
  • Исправления в отладчиках.

Поддержка проектной модели Makefile

Отметил этой весной пятилетие CLion, мы тут же включились в активную доработку самой ожидаемой возможности в IDE — поддержки проектов на основе Makefile. До этого у нас был только сырой прототип, который мы давали попробовать в частном порядке самым смелым нашим пользователям. Благодаря им мы смогли проверить прототип на широкой выборке Makefile-проектов, исправить множество проблем в нем и понять текущие (надеемся, временные) ограничения нашего решения.Наша цель — методы работы с проектом Makefile в CLion со всеми умными возможностями IDE, такими как навигация, рефактоги, статический анализ кода и другие возможности.

Текущий подход вкратце выглядит так: CLion запускает команду make на вашей дополнительной опцией --just-print , чтобы сэкономить время на реальной сборке. Если CLion может успешно распарсить вывод команды, то проект открывается и все работает!

Сразу оговоримся, работа над поддержкой Makefile в CLion еще далека от завершения — известных ограничений и недоделок еще много.Самое заметное:

  • Не поддерживаются проекты, использующие libtool (CPP-19549), distcc и ccache (CPP-19305) и другие обертки, которые «скрывают» флаги компиляции из выдачи или вмешиваются в вывод команды make .
  • CLion пока не умеет работать с выводами, производимыми не GNU (например, NMake, BSD) (CPP-18723).
  • Не поддерживаются проекты, которые отключают вывод имен в процессе сборки, так что CLion не может определить, к каким именно файлам сборки те или другие команды сборки.

Но даже текущее решение уже позволяет открыть в CLion ядро ​​Линукса или код сервера базы данных PostgreSQL. Если интересно, то текущий список проектов, на которых работает наш список проектов, где он работает на этой странице.

Попробовать на своем проекте очень просто:

  1. Подготовить проект, чтобы получить Makefile для него (например, во многих случаях надо запустить ./configure , так как CLion пока что сам не умеет этого делать).
  2. Открыть проект через File | Open и содержит самый главный проектный файл Makefile или прямо сам этот файл. Подтвердить, что хотите открыть как проект.
  3. CLion уточнит, запустить ли Clean. Это нужно, чтобы вызвать команду make подхватил все файлы, а не только последние изменения.
  4. Это, собственно, и все! Результат попытки загрузки проекта будет выведен в окно Build.

Вывод может содержать какие-то предупреждения, но если загрузка завершилась в целом успешно (около самой первой задачи должна быть зеленая отметка), то с проектом можно работать в CLion.

Настройки аргументов команды загрузки, тулчейн, использование для загрузки, и другие опции можно найти в Настройки / Предпочтения | Сборка, выполнение, развертывание | Makefile:

Для запуска и отладки Makefile-приложений потребуется такая же конфигурация Makefile Application. При этом таргет можно будет выбрать из выпадающего списка — CLion подскажет, какие есть варианты:

В нашем блоге на английском языке можно найти больше информации о работе с проектами на Makefile в CLion.Также рекомендуем к просмотру короткое демо:

Последние обновления в CMake

Как показывает статистика, три самых популярных сейчас проектных моделей среди разработчиков на C ++, это CMake, msbuild и Makefile. И именно CMake этот рейтинг уже три года и продолжает расти. Поэтому мы постоянно обновляем загружаемую в CLion версию CMake и работаем над последними нововведениями в самом CMake. В этот раз мы обновили версию до 3.17 и соответственно добавили поддержку двух новых полезных возможностей CMake:

  • с Ninja Multi-Config теперь возможно генерировать все конфигурации (а не только выбранную Debug или Release) с использованием генератора Ninja (включается через -G "Ninja Multi-Config" ) . CLion правда пока использует только одну конфигурацию, указанную в настройках профиля CMake для проекта. Но это ограничение текущего UI, которое мы планируем исправить в будущем.
  • Предварительно скомпилированные заголовки CMake заслуживают большего внимания.Вообще, идея предкомпилированных заголовочных файлов (PCH) не поддерживает компиляторами уже давно. CLion также умеет работать с PCH довольно давно. Теперь же можно не вспоминать флаги компилятора для PCH и передать их в CMake каждому конкретному компилятору по своему, а просто добавить заголовочные файлы в PCH-переменные таргета через команду target_precompile_headers . CLion 2020.2 теперь умеет с таким работать:

Заслуживает внимания и возможность открыть проект CMake в CLion из директории с результатом генерации CMake, теперь не только для генератора Makefile, но и для любого другого! Экономьте время — открывайте уже собранные проекты в CLion без перезапуска команды CMake на проекте.

С ++ 20

А вы знаете, что по нашим данным в этом году уже 12% разработчиков на C ++ используют стандарт C ++ 20 ?! Поэтому мы, конечно, работаем активно над поддержкой новых возможностей в CLion. Но давайте сначала вспомним, что у нас вообще с языками движками в CLion.

Итак, на текущий момент их два — встроенный на основе Java / Kotlin и довольно новый на основе Clangd, соответственно на С ++ (для его разработки мы пользуемся CLion). Сейчас все усилия вкладываются в движок на основе Clangd.Он кажется хорошей перспективой, хотя действия на всем проекте (вроде рефакторингов) на нем пока делать нельзя — тут даже не идеальный и местами медленный движок на основе Java выигрывает за счет всяких специфических резолвов, ну и, конечно, за счет наличия кэша. символов, необходимого для рефакторингов.

Но у Clangd есть один очень большой плюс — над поддержкой последних стандартов C ++ в Clang там работает все сообщество, ведь проект открытый. Это, конечно, не означает, что нам совсем ничего не надо делать — эту поддержку все равно потом надо адаптировать под нужды CLion.Но это уже проще, чем писать возможности поддержки C ++ с нуля! А еще на основе поддержки в Clang можно писать свой специфический анализ или делать какие-то специальные фичи (так мы, например, сделали автодополнение для Concept-ов несколько релизов назад).

Мы убедились, что последнее обновление Clangd-движок, пришедшее с LLVM, стабильно ведет себя на коде на C ++ 20, да и в целом по нашей встроенной статистике Clangd-движок стал стабильнее. Поэтому убрали из настроек возможность полностью отключить Clangd-движок.Зато добавили в Настройки / Предпочтения | Языки и фреймворки | C / C ++ | Звонкая информация о той ревизии, с которой собран наш движок. Теперь вы знаете, чего ожидать от C ++ и встроенного анализа Clang-Tidy:

Кстати, в нашем онлайн-хелпе есть отличная статья со сравнительным анализом двух движков в плане поддержки возможностей C ++.

А теперь о том, что же собственно добавилось из поддержки C ++ 20:

  • Автодополнение для ключевых слов C ++ 20: char8_t , consteval и constinit , co_await , co_return , и co_yield .
  • Автодополнение для полей из базового класса в назначенных инициализаторах:

  • Конструкция explicit (bool) теперь правильно подсвечивается, в ней работают подсказки имен, навигация и рефакторинги:

  • Для циклов для на основе диапазонов с инициализаторами заработал рефакторинг Переименовать для цикла цикла.

Статический анализатор кода

В прошлом году мы перевели самый «тяжелый» наш анализ — потока данных (Data Flow Analysis) — на движок на базе Clangd.Это сделано в основном для улучшения производительности. Но, как часто бывает, при рефакторинге было найдено много проблем и неаккуратностей. Так что мы в выпуск 2020.2 продолжили улучшать этот анализ и исправлять баги в нем:

  • Заметнее всего, наверное, был улучшен анализ на неиспользуемый код.
  • На DFA также переехали такие вещи как Код упрощения и Состояние цикла никогда не обновляется. Для первого в настройках теперь можно настроить отдельно разные случаи, которые он умеет находить:

    Теперь он более аккуратно работает в макросах и шаблонах:

    Второй же анализ позволяет находить бесконечные циклы из-за того , что условие цикла не обновляется внутри цикла.Знатоки могли бы заметить, что аналогичный анализ есть и в Clang-Tidy ( clang-tidy: bugprone-infinite-loop ), но там он не работает для циклов с точками выхода и зачастую ложно-срабатывает для лямбд и референсов. В CLion анализ работает в разных случаях аккуратно:

  • В CLion появился анализ на висячие указатели (висячие указатели)! Несмотря на некоторые ограничения (например, он работает только в локальном скоупе), он все равно очень полезен:

  • Для кода, использующего Концепции из C ++ 20, появился анализ и квик-фиксирующее добавление концепта объявленного типа auto , в котором присваивают результат выдачи ограниченного концепта функции:

Окно результатов статического анализа

В этом новом окне инспекции, расположенном в нижнем верхнем углу области редактора, стал новый виджет Inspection Widget (некоторые пользователи которого даже тщетно пытались рассмешить).Теперь именно там находятся настройки уровня подсветки (от показа всех проблем до полного отключения анализатора кода), а при клике открывается окно результатов статического анализа для данного файла:

Юнит-тестирование

Уже введенное здесь не раз исследование показывает, что 34% разработчиков на С ++ не пишут никаких юнит-тестов. Хочется верить, что взамен они ведут испытания какими-то другими средствами. Отчасти, проблема в том, что в C ++ нет ни стандартной проектной модели, ни стандартного менеджера зависимостей, а значит добавить фреймворк для юнит-тестирования в свой проект ох как не просто.Но сейчас становятся особо популярными так называемые фреймворки, предназначенные только для заголовков, легко подключить в свой проект — добавил заголовочный файл и пиши себе тесты. А мы со своей стороны в IDE стараемся поддержать как можно больше опций. В этом выпуске к набору из Google Test, Catch, Boost.Test еще добавили doctest. У нас, кстати, некоторое время назад был гостевой блог от его автора, где Виктор рассказывал, в чем преимущества данного фреймворка.

Поддержка в CLion включает обычные вещи:

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

Поддержка Google Test и Catch3 также обновилась:

  • Для Catch3 появилась поддержка шаблонных тестов.
  • А для Google Test поддержка макроса GTEST_SKIP () , который может быть очень полезен, если хочется уметь пропускать какие-то тесты, например в специфических окружениях.

Небольшое обзорное видео про улучшение в поддержке юнит тестирования нашего адвоката (кстати, автора фреймворка Catch / Catch3):

Предупреждая ваши вопросы про CTest: сделать его чуть сложнее, потому что это не «очередной» фреймворк , а некоторый уровень абстракции для запуска чего угодно в виде теста.Мы планируем некоторую интеграцию уже в 2020.3!

А также

Самое интересно, пожалуй, обсудили, теперь коротко обо всем остальном. Надо было с этого начать, но CLion 2020.2 включает множество небольших, но важных улучшений производительности редактора и исправлений подвисаний редактора. Одно из таких улучшений, например, это вставка обратного слэша при нажатии Введите внутри определения макроса . Казалось бы, как это помогает производительности редактора? Дело в том, что скорее всего новая строка — это часть определения текущего макроса, а вставка обратного слэша позволяет избежать ненужного репарсинга кучи кода, а значит и тормозов редактора.

Помимо этого:

  • Для разработчиков встроенных добавилось несколько важных интеграционных систем изменений в плагине для PlatformIO — генерация большего количества конфигураций запуска и отладки, подсветка в конфигурационных platformio.ini файлах и создание необходимого проекта профилей CMake автоматически.
  • Как обычно, из платформы IntelliJ приехало много улучшений в поддержке систем контроля версий. Из значимого: расширенные возможности по работе с GitHub Pull Requests и поддержка Git на WSL2 (то есть при работе с проектами на WSL2, CLion умеет теперь использовать Git оттуда).
  • По отладчикам в 2020.2 удалось сделать меньше, чем планировали. В основном, все большие задачи отодвинуты на 2020.3 (отладка от имени root-пользователя, отладка core-дампов). Но в этой версии мы проапгрейдили забандированную версию GDB до 9.2, а также обновили симпатичные принтеры GDB STL. Множество улучшений, как функциональных, так и по производительности и стабильности, было сделано в нашем отладчике на базе LLDB для тулчейна Microsoft Visual C ++.

На этом на сегодня все.Дочитали до конца? Спасибо вам огромное за внимание! Пытайтесь, пишите вопросы, предложения, восклицания в комментариях — мы всегда с радостью их читаем и отвечаем!

Команда CLion
Стремление к развитию

.

10 советов для продуктивности в CLion, кроссплатформенной С / С ++ IDE

Всем привет!

До выпуска нашей первой группы курса «Разработчик C ++» остались считанные дни. По итогам неплохо поработали напильником и надфилем над курсом: перекомпоновали домашние задания, обновили версию языка и ещё разное по мелочи. Ну, а пока продолжаем нашу традицию по интересным и полезным материалам.

Поехали.

Судя по собственному опыту разработки, многие разработчики C / C ++ пренебрегают идеей, что IDE может сделать их работу продуктивней.Ведь что может быть лучше, чем простые и быстрые Vim или Emac. Что ж, позвольте выполнить. Эти 10 советов CLion поднимут вас на новый уровень продуктивности, помогут сфокусироваться на важных и сложных задачах, в то время как IDE решит за вас рутинные задачи.

Прежде чем начать, познакомиться с CLion, новой кроссплатформенной IDE для разработки на C и C ++, созданной JetBrains. Она изначально поддерживает C и C ++, включая C ++ 11 (с некоторыми стандартными небольшими ограничениями), libc ++ и Boost.Она корректно обрабатывает макросы и шаблоны, а также работает с GCC или Clang (при работе с Windows понадобится или MinGW / MinGW-w64, или Cygwin), GDB, как встроенный дебаггер, и CMake, как система сборки и проектная модель. В дополнении к C / C ++ также можно использовать JavaScript, XML, HTML и CSS на том же уровне редактирования кода, используя, например, подсветку синтаксиса, анализ, автодополнение, навигацию и рефакторинг.

1. Умное автодополнение знает, что вам нужно

В первую очередь, нам всем нужен редактор.Автодополнение кода крайне важно: мы просто начинаем вводить символ (переменная, функция, тип, имя класса) и редактор показывает нам список подходящих предложений. Это просто, но действительно ли нам нужны все те опции, описанные в примере ниже?

За счет нам нужно только что-то с типом idPlayer * . И именно это показывает умное автодополнение CLion! Она автоматически фильтрует предложения, мгновенно на контексте кода:

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

2.Используйте сразу, определяющее позднее

Когда появляется гениальная идея, не хочется тратить время на скучные рутинные задачи. Предположим, вы использовали функцию, которая до сих пор не была имплементирована или даже определена. CLion выделяется ее красным. Нужно ли сразу задержаться для имплементации функции? Вовсе нет! Попросите CLion сгенерировать заглушку и вернитесь к этому моменту позднее. Просто нажмите Alt + Enter:

Объявление и мгновенное определение появятся в коде:

Работает аналогичным образом для чисел и имен классов:

3.Живые шаблоны для ваших любимых или используемых фрагментов кода

Как получить цикл или итерацию по диапазону (в стиле C ++ 11) просто напечатав несколько символов? Введите для и нажмите Tab, чтобы получить цикл; или введите iter или itit, а затем нажмите Tab:

При ближайшем будущем, что в Clion можно создать пользовательские шаблоны Live Template’ы или «Surround With» (которые быстро заворачивают выбранный код в конструкт). Покажем пример, как быстро получить класс, наследовать из другого существующего класса:

После добавления нового «cp» шаблона, можно достичь cp в редакторе:

Описание шаблона можно сразу увидеть в выпадающем списке автодополнения.Шаблон расширяется при нажатии Tab. Теперь можно добавить новое название класса, затем выбрать родительский класс и модификатор для из списка автодополнения:

Вуаля! Новый класс готов.

Конечно, можно сгенерировать более сложные шаблоны, включая переменную $ SELECTION $ для получения шаблона «Surround With».

4. Следуйте иерархическому виду

Разработчики кодируют чаще, чем пишут его. Перед тем, как добавить новый код или обновить существующий, проводится глубокое и детальное исследование существующей кодовой базы.(Только если вы не начинаете проект с нуля, что редкость.) Во многих случаях продуктивность зависит от того, как быстро можно проникнуть сквозь кодовую базу.
Для таких случаев CLion предоставляет широкий спектр возможностей по коду:

  • стандартные инструменты goto объявления / определения;
  • быстро переходите к соответствующему символу, недавним файлам или месту, которые вы правили последним;
  • ищите любой класс, файл или символ по названию;
  • используйте контекстный поиск с Find Usage;
  • перемещайтесь по текущему файлу с использованием вида File Structure;
  • извлекайте пользу из нескольких иерархических видов, включая иерархию вызовов, иерархию типов и иерархию импорта.

Call Hierarchy — мой любимый. Он позволяет увидеть в деталях весь стекловолокно с ветками. Выглядит очень просто, не правда ли? Одним кликом вы можете переместиться в нужное место в редакторе, используя автопрокруткой в ​​Source, сделать процесс еще быстрее:

5. Меняйте порядок и добавляйте параметры — IDE позаботится об использовании

Рефакторинг — мощный процесс, который помогает улучшить код , сделать его чище и удобней.Некоторые IDE предоставляют ограниченное количество способов его автоматизации. В CLion их очень много — от простых и популярных Переименовать в сложные Изменить подпись, извлечь функцию или класс, встроенные и многие другие. Можете положиться на CLion, корректность кода сохранится и при внесении изменений рефакторинга.

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

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

К слову, добавить новый тип интерфейса в этом окне очень просто благодоря автодополнению кода.После того, как я нажимаю «Refactor», Clion обновляет подпись и все использование, заменив значение по умолчанию для данного типа, которое в этом случае равно nullptr:

А что, если я решу упорядочить параметры во время Изменить подпись? Конечно же, их порядок обновится в соответствии со всеми использованиями:

6. Извлекайте все, с большим количеством опций

Извлечение части кода в отдельной функции — популярный метод рефакторинга, но что насчет других? Например, Extract Typedef, Define, Variable, Parameter или даже Subclass? Опыт их использования в CLion улучшается благодаря небольшим, но полезным деталям.Например, вы можете изменить все вхождения (если их больше одного) при извлечении константы или альтернативы; объявить константу или параметр статическими; использовать автоматический тип при извлечении переменной; и так далее и тому подобное:

7. Неиспользуемый код? «=» В условии? Не проблема!

Следуя закону Мерфи для компьютеров, в каждой нетривиальной программе есть хотя бы один баг. Но давайте сделаем все возможное и исправим как можно больше из них. Пока мы стараемся локализовать и, надеюсь, пофиксить баги, постоянно мониторит ваш код на наличие ошибок.Любая подозрительная часть подчеркивается в применении быстрых фиксов. Для их просмотра достаточно нажать Alt + Enter. IDE также проводит полный анализ потока данных для неиспользуемого и недоступного:

CLion не пропустит и вездесущие ошибки C / C ++, например, «=» в условии:

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

8. Простая отладка с помощью смотреть значения прямо в редакторе!

Ключевое преимущество IDE над основным текстовым редактором — опыт дебаггинга. Конечно можно запустить отдельный процесс дебаггинга, но отладка внутри IDE экономит много времени и предоставляет дополнительный полезный функционал.

CLion интегрирует GDB бэкенд, предоставляя все необходимое в интерфейсе и
улучшенная опыт использования некоторых полезных функций.К примеру, каждый раз, когда вы можете использовать преимущества автодополнения кода. В отдельном инструменте показаны все детали текущего состояния программы. А вот и вишенка на торте: во время отладки IDE показывает значения рядом с их объявлением:

9. Передумали во время отладки? Не перезапускайте — сразу меняйте значения числа!

Значения изменений заключаются в понимании данных и контроле их перемещения в программе.Иногда нужно проверить несколько характеристик, например, проследить отдельную ветвь выполнения. Не нужно тратить драгоценное время на перезапуск — поменяйте значение в текущей сессии:

Теперь мы можем продолжить ту же самую сессию, но с новым присвоенным значением y, равным 55. Как было замечено ранее, IDE показывает значения рядом с их объявлением в редакторе, подчеркивая примененные изменения:

10. Все необходимые инструменты на борту — Не нужно переключаться!
IDE расшифровывается как интегрированная среда разработки (Интегрированная Среда Разработки), ее использование означает, что в работе вам больше не требуется приложение, баг-трекером в браузере или даже терминалом.Весь этот инструментрий уже встроен в CLion IDE, чтобы вы могли сфокусироваться на коде с минимумом отвлечения.

Опишите эти советы в CLion и убедитесь, что они помогут вам стать эффективней и продуктивней!

THE END

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

.

Настройка IDE Clion и Cmake для работы с STM32 и C ++ / Хабр

Перед примером моей настройки немного лирики.

Давно хотел попробовать себя в микроконтроллерах, вернее были идеи с их использованием, которые очень хотелось реализовать. Сначала начал с PIC32 — огонь контроллеры. Так получалось, что поначалу и коротил их порты, и с питанием завышал — неубиваемые (не совсем конечно, порт правда сгорел, но сам контроллер продолжал работу). IDE MplabX неплоха, подкупал графический блок с отображением занимаемой RAM / Flash на выбранном МК — удобно, но сам NetBeans как IDE это жесть, ну не удобно ни разу после Idea.Но проблема была не в этом — как потом оказалось, PIC’и тяжело достать, мало кто их возит, а если и возит, то по относительно высокой цене.

Дальше решил копнуть в сторону STM32 — они в большом количестве, за базовую периферию просят не много, но главное — это доставаемость. (Но кодогенератор STM’а хуже Microchip’a — весь файл загажен комментариями и функциями, это конечно сильно огорчило. У Microchip’а все сгенеренные функции внесены в отдельные файлы и main.c практически чист — прелесть).
(UPD: вот тут признаюсь ошибался, спасибо golf2109, онал, что от заваливания комментариями и функциями файла main.c можно избавиться, достаточно включить в настройках опцию для выполнения сгенерированного кода в отдельных файлах, но я все же в недоумении, почему это не дефолтная настройка, вроде логично было бы)

Теперь об IDE для STM32.

Попробовал хваленый Keil — конечно, получше блокнота, но ужасно не удобный матюгаться хочется).

Потом попробовал CooCox — гораздо лучше и приятнее настройки, хорошо настраивает форматирование (прямая порадовала настройка переноса параметров в методх, да и очень кстати), но опять же не хватало многих плюшек от Idea и опять же проблемы с пакетами.

Clion почти та же Idea только для C / C ++ и сразу захотелось ее прикрутить, но как оказалось довольно проблематично (особенно для человека, который с плюсами-то не силен, особенно со всякими сборщиками и компиляторами, парой сотен опций компиляции).Начал с блога JetBrains. Довольно подробно описана, но это для прошлых версий STM32CubeMX, в новой немного поменялась структура каталогов, в чего я некоторое время не понимает почему не компилится. Потом разобрался — изменил пути, для cortex-m3 убрал параметры -mfpu. Но опять не компилился. Дальше оказалось, что я не тот компилятор установил, вернее просто скачал его, но не указал путь к нему в файле последней сборки (ну сложновато вечером думать).

Главное в Clion’е поставить галочку в настройках ‘Автоматически перезагружать проект Cmake при редактировании’ (Настройки -> Сборка, Выполнение, Развертывание -> Cmake), тогда после правок не нужно ничего очищать вручную.

Еще из изменений — дебаггер, упомянутый в блоге, переименовали в Ozone, его еще не тестил, позже отпишусь.

И последняя проблема, сверлившая мозг. Очень хотелось ООП, но не компилился проект, если я добавлял C ++ файл, исправление ошибок с не найденными функциями (например, _exit, _sbrk и пр.). Здесь проблем было 2:

  • в файле CMakeLists.txt в блоге JetBrains не был выставлен флаг CXX в директиве проекта (нужен для файлов C ++)
  • для исправления ошибок в файле из блога не хватало опций -specs = nosys.specs -specs = nano.specs после опции -gc-section. Они как раз эти прототипы или наоборот игнорят эти методы (тут не могу точно сказать)

После этого проект нормально компилиться и размер его стал в пределах нормы (без опции -specs = nano.specs размер был в 10 раз больше для пустого проекта примерно 110 кб., С опцией — 18 кб.)

Итак, что я сделал:

  1. ставим Clion
  2. заходим в настройки (Настройки -> Сборка, Выполнение, Развертывание -> Cmake) и ставим галочку ‘Автоматически перезагружать проект Cmake при редактировании’
  3. здесь же вписываем в поле Cmake options параметр -DCMAKE_TOOLCHAIN_FILE = STM32L1xx.cmake и в поле Путь генерации ставим build (если поменять, то в файлах CMakeLists.txt и STM32L1xx.cmake, его тоже будет поменять)
  4. ставим компилятор ARM (здесь брал)
  5. импортируем проект (который сгенерировали в STM32CubeMx), говорим, что можно создать CMakeLists.txt
  6. отсюда или из моего репозитория копируем содержимое CMakeLists.txt, созданное в Clion’e и добавляем файл STM32L1xx.cmake (можно обозвать как угодно)
  7. в STM32L1xx.cmake правим имя проекта в директиве проекта и можно убрать CXX, если не нужен C ++
  8. заменить в файле CMakeLists.txt в директиве add_definitions (-DSTM32L100xC) на свой контроллер
  9. для надежности можно сделать: Инструменты -> Cmake -> Сброс кеша и перезагрузка проекта и потом Инструменты -> Cmake -> Перезагрузить проект Cmake
  10. теперь можно сбилдить

Файл CMakeLists.txt

  проекта (Skeleton C CXX ASM)
cmake_minimum_required (ВЕРСИЯ 3.5.0)

add_definitions (-DSTM32L100xC)

установить (FREERTOS_DIR Middlewares / Third_Party / FreeRTOS / Source /)

файл (GLOB_RECURSE USER_SOURCES "Src / *. c")
файл (GLOB_RECURSE HAL_SOURCES "Драйверы / STM32L1xx_HAL_Driver / Src / *. c")
файл(
    GLOB_RECURSE
    FREERTOS_SOURCES
    "$ {FREERTOS_DIR} / *. C"
    "$ {FREERTOS_DIR} / CMSIS_RTOS / *. C"
    "$ {FREERTOS_DIR} / Portable / GCC / ARM_CM3 / *. C"
)

add_library (
    CMSIS
    Src / system_stm32l1xx.c
    запуск / startup_stm32l100xc.s
)

include_directories (Inc)
include_directories (Src / gps / parser / nmea)
include_directories (Драйверы / STM32L1xx_HAL_Driver / Inc)
include_directories (Драйверы / CMSIS / Включить)
include_directories (Драйверы / CMSIS / Устройство / ST / STM32L1xx / Включить)

include_directories ($ {FREERTOS_DIR})
include_directories ($ {FREERTOS_DIR} / CMSIS_RTOS)
include_directories ($ {FREERTOS_DIR} / include)
include_directories ($ {FREERTOS_DIR} / Portable / GCC / ARM_CM3 /)
include_directories ($ {FREERTOS_DIR} / Portable / GCC / MemMang)

add_executable ($ {PROJECT_NAME}.эльф $ {USER_SOURCES} $ {HAL_SOURCES} $ {LINKER_SCRIPT} $ {FREERTOS_SOURCES})

target_link_libraries ($ {PROJECT_NAME} .elf CMSIS)

установить (CMAKE_EXE_LINKER_FLAGS "$ {CMAKE_EXE_LINKER_FLAGS} -Wl, -Map = $ {PROJECT_SOURCE_DIR} / build / $ {PROJECT_NAME} .map")
установить (HEX_FILE $ {PROJECT_SOURCE_DIR} / build / $ {PROJECT_NAME} .hex)
установить (BIN_FILE $ {PROJECT_SOURCE_DIR} / build / $ {PROJECT_NAME} .bin)
add_custom_command (TARGET $ {PROJECT_NAME} .elf POST_BUILD
        КОМАНДА $ {CMAKE_OBJCOPY} -Oihex $  $ {HEX_FILE}
        КОМАНДА $ {CMAKE_OBJCOPY} -Obinary $  $ {BIN_FILE}
        КОММЕНТАРИЙ «Строительство $ {HEX_FILE} \ nБилд $ {BIN_FILE}»)  

Файл STM32L1xx.cmake:

  ВКЛЮЧИТЬ (CMakeForceCompiler)

НАБОР (CMAKE_SYSTEM_NAME Generic)
НАБОР (CMAKE_SYSTEM_VERSION 1)

# Укажите кросс-компилятор. arm-none-eabi-gcc и arm-none-eabi-g ++ - полный путь требуется
CMAKE_FORCE_C_COMPILER (arm-none-eabi-gcc GNU)
CMAKE_FORCE_CXX_COMPILER (arm-none-eabi-g ++ GNU)

УСТАНОВИТЬ (LINKER_SCRIPT $ {PROJECT_SOURCE_DIR} /STM32L100RCTx_FLASH.ld)
SET (COMMON_FLAGS "-mcpu = cortex-m3 -O2 -mthumb -ffunction-section -fdata-section -g -fno-common -fmessage-length = 0")
НАБОР (CMAKE_CXX_FLAGS_INIT "$ {COMMON_FLAGS} -std = c ++ 11")
НАБОР (CMAKE_C_FLAGS_INIT "$ {COMMON_FLAGS} -std = gnu99")
УСТАНОВИТЬ (CMAKE_EXE_LINKER_FLAGS_INIT "-Wl, -gc-section -specs = nosys.specs -specs = nano.specs -T $ {LINKER_SCRIPT} ")  

Работать стало приятно, но пока заливаю прошивку через STM’овскую утилиту, позже попробую накрутить OZONE. На вопросы отвечу (если смогу). .

Как настроить Clion для компиляции и запуск

Я просто скачать Clion от https://www.jetbrains.com/ потому что я просто обожаю всю их продукцию.

, однако у меня возникли проблемы с его правильной конфигурацией, отбросьте тот факт, что я пытаюсь, я не могу скомпилировать и запустить свое приложение (простой hello world one)

когда я пытаюсь запустить приложение, оно добавлено на «Редактировать конфигурацию», поэтому я добавил новое приложение и теперь проблема.

  1. я не могу указать цель Единственное, что я могу сделать, это установить «все цели»
  2. я не могу указать конфигурацию (все учебники, которые имеют, имеют «отладка или запуск» здесь)
  3. исполняемый? Путь к gcc должен быть здесь? (C: \ MinGW \ bin \ gcc.exe)

конфигурация Остальное, похоже, не требуется.

Мой CMakeList.тхт выглядит так:

  cmake_minimum_required (ВЕРСИЯ 3.3)
проект (тест)

установить (CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS} -std = c ++ 11")

установить (SOURCE_FILES test.c test.h)
add_executable (тестовый $ {SOURCE_FILES})
  

Я пытаюсь выполнить это «все цели», а также попытаться настроить выполнимый. Все, но я не могу заставить его работать.

здесь кто-нибудь, у кого были эти проблемы раньше и может посоветовать?
Спасибо

3 ответа


я столкнулся с такой же проблемой с CLion 1.2.1 (на момент написания этого) после обновления Windows 10. Он работал нормально, прежде чем я обновил свою ОС. Моя ОС на диске установлена ​​C: \, а CLion 1.2.1 и Cygwin (64-бит) на диске D: \.

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

КОРОТКИЙ ОТВЕТ: (должно быть похоже на MinGW тоже, но я не пробовал это):

  1. установить Cygwin с GCC, G ++, GDB и CMake (необходимые версии)
  2. добавить полный к каталогу Cygwin ‘bin’ в Windows переменные среды
  3. перезапустите CLion и проверьте «настройку» -> «сборка, выполнение, развертывание», чтобы убедиться, что CLion взял правильную версию Cygwin, make и gdb
  4. Регистрация конфигурация проекта («Выполнить» -> «Изменить конфигурацию»), чтобы убедиться, что ваше имя проекта появляется там, и вы можете выбрать параметры в полях «цель», «конфигурация» и «исполняемый файл».
  5. построить а то выполнить
  6. наслаждайтесь

ОТВЕТ:

Ниже приведены подробные шаги, которые решили эту проблему для меня:

  1. удалить / удалить предыдущую версию Cygwin (MinGW в вашем деле)

  2. убедитесь, что CLion обновлен

  3. запустите программу Cygwin (x64 для моей 64-разрядной ОС)

  4. установить по крайней мере следующие пакеты для Cygwin:

    gcc
    g ++
    сделать
    Cmake
    GDB

    Убедитесь, что вы устанавливаете правильные версии вышеуказанных пакетов, которые требуются CLion.Вы можете найти необходимые версии версий в разделе быстрого запуска CLion (я не могу опубликовать более 2 ссылок, пока у меня не будет больше репутации точки.)

  5. вам нужно добавить Cygwin (или MinGW) в переменную среду Windows с именем ‘Path’ . Вы можете Google, как найти переменные среды для вашей версии Windows

[на Win 10 Щелкните правой кнопкой мыши на «этот ПК» и выберите Свойства -> расширенные настройки -> переменные среды… -> в разделе «системные переменные» -> найти «путь» -> нажмите «Изменить»]

  1. добавить папка «bin» для альтернатив Path. Для Cygwin я добавил:
    D: \ cygwin64 \ bin

  2. запустите CLion и выполните в » либо из файла приветствия, либо из файла ->

  3. выберите «Сборка, Выполнение, Развертывание» а затем нажмите кнопку «Toolchains»

  4. код ‘среда’ должен показывать правильный путь в каталог установки Cygwin (или MinGW)

  5. на ‘CMake исполняемый файл’ поставьте ‘використовуйте комплект CMake x.X. x ‘ (3.3.2 в случае на момент написания этого ответа)

  6. ‘Debugger’ показал мне говорит ‘Cygwin GDB GNU gdb (GDB) 7.8’ [слишком много gdb в этой строке ;-)]

  7. ниже есть галочка для всех категорий и также должен правильный путь к ‘make’ , ‘Компилятор C’ и ‘компилятор C ++’

характеристики:
проверьте все пути к компилятору, make и gdb

  1. теперь переходим к «Выполнить» -> «Изменить конфигурацию» .Вы должны увидеть свое имя проекта на левой боковой панели и конфигурации правой стороны

характеристики:
Проверьте конфигурацию для запуска проекта

  1. в окне консоли не должно быть ошибок. Вы видите, что «Беги» -> «Строй» сейчас

  2. создайте свой проект, а затем запустите проект. Вы должны увидеть в окне терминала

надеюсь, что это помогает! Удачи и наслаждайтесь CLion.


Я встретил некоторые проблемы в Clion и, наконец, я решил их. Вот некоторый опыт.

  1. скачать и установить MinGW
  2. пакет G ++ и gcc должен быть установлен по умолчанию. Используйте менеджер установки MinGW для установки mingw32-libz и mingw32-make . Вы можете открыть диспетчер установки MinGW через C: \ MinGW \ libexec \ mingw-get -… exe этот шаг является важным шагом. Если Clion не может найти компилятор C и Компилятор C ++, подтвердите менеджер установки MinGW, чтобы сделать каждый необходимый пакет установлен.
  3. в Clion, открыть файл-> настройки-> сборки, выполнение, развертывания-> наборы. Установите MinGW home в качестве локального файла MinGW.
  4. Начните свой «Привет Мир»!

вы также можете использовать компилятор Microsoft Visual Studio вместо Cygwin или MinGW в среде Windows в качестве компилятора для CLion.

просто пойти, чтобы найти действие в справке и введите «реестр» без «и включите CLion.включить.индекса MSVC
Теперь настройте набор инструментов с помощью компилятора Microsoft Visual Studio. (Вам нужно скачать его, если он еще не загружен)

перейти по этой ссылке для подробности:
https://www.jetbrains.com/help/clion/quick-tutorial-on-configuring-clion-on-windows.html

0

автор: анант викрам сингх


.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *