воскресенье, 21 ноября 2010 г.

Сборка и отладка плагинов для Qt Creator 2.1

Почти год назад я написал про создание и сборку плагинов для Qt Creator: часть 1 и часть 2. До третьей части руки не дошли- родилась дочка, на Creator пришлось почти полностью забить. Но сейчас появилось время поковыряться со своим плагином в последнем Creator'е, посмотреть на новые фичи. Оказалось, что написание новых плагинов теперь сильно оптимизировано- в Qt Creator 2.1 появился мастер создания плагина.

Для старых версий Qt Creator, в том числе и 2.0.1, см. пост "Пишем плагин для Qt Creator - часть 1". Этот пост актуален для Qt Creator 2.1.

Что нужно для сборки.

Я использовал библиотеку Qt 4.7.0 для MSVC. Библиотеку я не переконфигурировал. Я пробовал Qt 4.7.1, но с ней Qt Creator не линкуется.

Я собирал плагин в Qt Creator 2.1 beta 2. Также нужны его исходники, поскольку сгенерированный плагин не совместим со старыми версиями Creator'а.

Создаем новый плагин.

Во-первых, надо собрать дебаг билд Qt Creator из исходников. Используем shadow build:


Проект с построенным Qt Creator можно закрывать.

Во-вторых, создаем новый плагин. В качестве билд-директории будем использовать ту же билд директорию, что и для самого Qt Creator, иначе плагин не соберется. Директорию с исходниками плагина лучше создавать на том же уровне (параллельно) что и билд директория с исходниками Qt Creator, иначе Creator будет жаловаться, хотя и не фатально.







Что получили.

Мастер нового плагина сгенерировал файл проекта, в котором прописаны несколько вещей:
  • PROVIDER (определяет директорию, где появится плагин в lib\qtcreator\plugins, обычно это Nokia)
  • QTCREATOR_SOURCES (путь к исходникам Qt Creator)
  • IDE_BUILD_TREE (билд директория)
  • LIBS (путь к библиотекам)
и хорошо знакомые
  • TARGET (= DoNothing)
  • TEMPLATE (= lib)
  • SOURCES
  • HEADERS
  • OTHER_FILES
Также созданы файлы:
  • DoNothing.pluginspec
  • donothing.cpp
  • donothing.h
  • donothing_global.h
Я здесь содержимое этих файлов приводить не буду. Pluginspec не изменился. Сишник и хедер определяют минимальные методы плагина и реализуют новый пункт меню Tools.

Сборка.

В Build Settings плагина DoNothing указывем нужную билд-директорию.



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

Запускаем только что собранный Qt Creator (можно из самого Qt Creator, если не закрыли). Выбираем пункт меню Help->About Plugins... Находим в списке наш плагин:



Также, в меню Tools добавился пункт DoNothing->DoNothing action:


Что нужно для отладки.

Во-первых, проверяем Run Settings плагина: Run Configuration- запускать только что собранный Qt Creator, исполняемый файл- он же, Working directory- $BUILDDIR:



Во-вторых, открываем donothing.cpp и ставим где-нибудь точку останова. Например, но выходе из DoNothingImpl::initialize().

В-третьих, запускаем отладку плагина. Я получил сообщение, что нету дебаг хелперов. Жмем Continue Aniway. Qt Creator стартует и останавливается на нашем бряке:



4 комментария:

  1. Не понял только зачем делать исходники плагина на том же уровне вложенности что и исходники креатора. У меня лежат на разных и не ругается. Можно поподробнее об этом?

    ОтветитьУдалить
  2. Спасибо, что нашли! Исправил на билд директорию.

    ОтветитьУдалить
  3. При чем здесь билдовая директория тоже не понял. Например у меня креатор лежит /home/tass/Work/QtTools/QtCreator/qt-creator, его билд /home/tass/Work/QtTools/QtCreator/qt-creator/build, плагин лежит в /home/tass/Work/Personal/qt-creator-xml-tree-plugin и вроде никто нигде не ругается :)

    ОтветитьУдалить
  4. При чем она здесь- я сам не понимаю, не должно это ни на что повлиять. Однако же, вот что происходит. Я вчера попробовал создать проект в директории d:\Projects\NewProject, билд креатора лежит в d:\Projects\_QtC\qt-creator-2.1.beta2-build (или как-то так, не помню точное название последней директории). В общем, исходники на один уровень выше. В итоге, когда указываю директорию для билда плагина, получаю сообщение "Qmake does not support build directories below the source directory" прямо под путем к билд директории. Такое же сообщение- когда плагин компилирую. Может, оно только на винде проявляется, а может, и нет. Похоже, правда, что это ни на что не влияет. Но я на всякий случай директории организовал так, чтобы никто не ругался.

    ОтветитьУдалить