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).

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

    Ну и картинка, как это выглядит:


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

    UPD /2015-07-18/: Сделал PPA для Ubuntu 14.04/Mint 17.x с QtC из git [master] и CMakeProjectManager2: launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git
    Поделиться публикацией

    Похожие публикации

    Комментарии 5

      0
      Помню где-то слышал, что в Kitware запилили в cmake библиотеку для интеграции cmake с различными IDE, но нигде сейчас не вижу никаких доков по ней. Так ничего и не сделали в итоге?
        0
        Пока не слышал, но и времени мало. Как-то искал, с год назад — не нашёл. В том же KDevelop, сделано на основе исходников. Можно ещё изучить как поддержка CMake реализована в Clion.
        0
        Можно будет скомпилировать CMake проект под Android? Я пока ручками pro файлы из CMakeLists.txt генерирую, т.к. не нашёл альтернатив.
          0
          Вопрос очень пространный. Если сборка была через указание тулчейна, то, наверное, теперь можно. Да и раньше можно было, только немного неудобнее. Но, вообще, если при помощи самого cmake можно заставить сконфиругировать проект для сборки под Android то и в креаторе можно.
          0

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

          Самое читаемое