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