CMakeProjectManager2: немного удобства при работе с CMake в 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).
Стоит отметить, что пользовательский ввод параметров сохранён, более того, определяется, если параметр уже задан, то будет использоваться пользовательский.
Ну и картинка, как это выглядит:
Если кому-то это покажется полезным, буду рад. Особенно я буду рад пул-реквестам с исправлением багов и реализацией новых фич. Репорты тоже хорошо, но по тенденции развития проекта можете понять: особо времени на него нет, так что реакция может быть от «медленно» до «ооооочень медленно».