CMakeProjectManager2: немного удобства при работе с CMake в Qt Creator

в 5:15, , рубрики: c++, cmake, IDE, qt, qt creator

День добрый,

CMakeProjectManager2 — это форк оригинального плагина Qt Creator для поддержки работы с системой сборки CMake. Вялая история развития этого проекта идёт с 2011 года (первая моя заметка в блоге: htrd.su/wiki/zhurnal/2011-03-24_14.49_qt_creator_i_cmake_-_prodolzhenie, второе обновление от 2012 года: htrd.su/wiki/zhurnal/2012/10/17/cmakeprojectmanager2_-_poslednie_izmenenija). С тех пор ничего нового не добавлялось. Обеспечивалась совместимость с последними версиями Qt Creator, репозиторий переехал на GitHub (в качестве эксперимента).

Но за вчера и сегодня добавилось ещё несколько изменений, что и стало поводом упомянуть проект на Хабре.

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

  • Структура файлов проекта берётся не из .cbp файла, а сканированием дерева проекта. Как вариант может оказаться медленно на больших проектах, с другой стороны, релоадинг дерева происходит не каждый раз, а при смене CMakeLists.txt или при добавлении, удалении, переименовывании файлов (этого, кстати, в базовом плагине нет)
  • Теперь можно создавать новые файлы в дереве проектов непосредственно из Qt Creator'а
  • Появилась возможность переименовывать файлы
  • Появилась возможность удалять файлы с диска

Тогда же забрезжила идея о добавлении в плагин поддержки парсинга CMakeFiles.txt минуя запуск CMake и генерации .cbp файла. Но (забегая вперёд) эта идея так и осталась идеей: был написан отдельно парсер и токенайзер на основе исходного кода CMake, но наработки канули в лету вместе с очередным крахом винта. До интеграции в плагин так и не дошло.

Второй пакет изменений был добавлен в 2012 году, включал следующие фичи и исправления:

  • Для каждого профиля сборки сохраняются введённые параметры для CMake, так что, выбрав в следующий раз «Run CMake» не нужно вспоминать, с какими параметрами вы его запускали и легче управлять профилями сборки. Вкупе с последней фичей из апстрима: сохранения глобальной истории параметров для CMake, получается достаточно мощный механизм.
  • Используя вышеприведённую информацию, появилась возможность при модификации дерева исходников (добавление, удаление, переименование) в фоновом режиме запускать обновление CBP файла и дерева сборки, что особо актуально при использовании глоббинга.
  • По сравнению с первым вариантом, получилось значительно сократить расходование памяти при использовании плагина, особенно когда в дереве проекта много вспомогательных модулей, временного C/C++ кода.

Начиная с этой версии можно достаточно комфортно использовать CMake если формирование списка файлов основано на глоббинге, т.е. если список задаётся по маске, примерно так:

# UTILS
file(GLOB_RECURSE UTIL_SOURCES "../util/*.cpp")
file(GLOB_RECURSE UTIL_HEADERS "../util/*.h" "../util/*.hpp")

При добавлении файла через Qt Creator автоматически обновится кеш и файл увидится в дереве, системой сборки и парсером C++.

С тех пор кодовая база только синхронизировалась с апстримом (по сути, больших изменений относительно него нет). Для первой версии была попытка подать мерж-реквест, но зарубили из-за отображения всех файлов, вместо тех, которые как-то прописаны в CMakeLists.txt. После этого попытки прекратил. Желающие пропихнуть часть или все изменения — велком!

Но вот случилось так, что возникла необходимость в кросс-компиляции CMake проектов из недр Qt Creator'а. Сделать это не трудно, достаточно оформить Toolchain-файл (подробнее) и передать его через специальный параметр процессу cmake. Неудобно только каждый раз прописывать параметры руками.

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

  • Добавлена возможность выбирать тип сборки
  • Добавлена возможность назначать тулчейн

Да, изменений не много, но, думаю, это и не важно. Важно, что стало чуточку удобнее и проще.

По сути, эти параметры служат для задания в более дружественной формы параметров для CMake: -DCMAKE_BUILD_TYPE= и -DCMAKE_TOOLCHAIN_FILE соответственно.

Про тулчейн немного подробнее. Изначально планировалось три способа его задания:

  • Автоматическое конструирование на основе Qt Creator Kit (сейчас это знание используется только парсером, cmake же вполне может найти любой другой подходящий компилятор и использовать его для сборки)
  • Ручное задание файла (пока сделано без возможности открытия диалога поиска, только ручной ввод: issue #2)
  • «Инлайн» тулчейн: редактирует во встроенном редакторе, при запуске контент сохраняется в директории отстройки под именем QtCreator-toolchain-override.cmake

Пока вариант на основе Qt Creator Kit выключен (issue #4).

Плюс есть нюанс: согласно документации CMake, смена тулчейна возможно только на новой конфигурации либо на полной очистке текущей (удаления CMakeFiles и CMakeCache.txt), поэтому, если замечены изменения настроек тулчейна, производится полное переконфигурирование без использования кеша. Планирую добавить диалог с предупреждением (issue #1).

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

Ну и картинка, как это выглядит:
CMakeProjectManager2: немного удобства при работе с CMake в Qt Creator - 1

Если кому-то это покажется полезным, буду рад. Особенно я буду рад пул-реквестам с исправлением багов и реализацией новых фич. Репорты тоже хорошо, но по тенденции развития проекта можете понять: особо времени на него нет, так что реакция может быть от «медленно» до «ооооочень медленно».

Автор: monah_tuk

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js