Правила построения для Qt MOC, UIC и RCC в MS Visual Studio 2008

Posted: воскресенье, 23 мая 2010 г.

Всем привет. Logo

Предыстория

Так вышло, что, работая над очередным проектом с использованием Qt, мне окончательно надоело прописывать вручную шаги построения (Custom Build Steps) для файлов, которые нужно предварительно обрабатывать с помощью метаобъектного компилятора Qt (Meta-Object Compiler, MOC).

Я конечно знал о существовании Qt Visual Studio Add-in, который умеет это делать автоматически, однако, в моей профессиональной деятельности наступил тот этап, когда хотелось бы контролировать каждую мелочь самостоятельно, но делать это с удобством. Посему я решил вынести правила построения для MOC в отдельный файл, ну а заодно сделал это и для компилятора описаний графического интерфейса UIC и компилятора ресурсов RCC.

Результат

В студии есть такая штука как пользовательские правила построения (Custom Build Rules). По сути это обычный xml-файл, в котором описано, каким образом нужно собирать те или иные типы файлов.

Руководствуясь документацией Qt, я записал все параметры для запуска MOC, UIC и RCC в файл правил. В результате (стоит лишь подключить этот файл к проекту) имеем вот что:

Project properties

и соответственно в свойствах заголовочного файла:

header properties

Подключить файл к проекту проще простого: кликаем правой кнопкой мышки на проекте и в меню выбираем «Custom Build Rules…». Дальше находим наш файл правил и ставим напротив соответствующего пункта галочку.

Я ещё не полностью протестировал все параметры (особенно я не уверен касательно правильности указания параметров сжатия RCC), однако, уже с удовольствием пользуюсь подобным подходом.

Достоинства:

  • Высокая экономия времени за счёт отсутствия необходимости прописывать Custom Build Steps для каждого файла, требующего обработку метаобъектным компилятором.
  • Если мы внезапно захотим изменить путь, по которому будут складываться сгенерированные файлы, нам достаточно будет это сделать единожды в настройках проекта, а не рыскать по свойствам каждого файла в отдельности.
  • Гораздо удобнее выбрать в свойствах нужный параметр (тем более, для каждого их них есть краткое описание), чем помнить наизусть ключи командной строки.

Недостатки:

  • В студии обнаружилась проблема: если мы вручную выставляем в свойствах файла кастомный инструмент для сборки, она почему-то не сохраняет это в файл проекта. Выход из этой ситуации — привязка инструментов к файлам по расширению. Отсюда следует, что для заголовочных файлов, которые нужно обрабатывать moc’ом, нужно использовать отличное от *.h расширение. Я использую *.hxx, а в одном проекте вообще заставил MOC проходить по всем заголовочным файлам — потеря времени при этом оказалась несущественной даже при полной пересборке проекта.
  • Нет совместимости с новой VS 2010. Дело в том, что в 2010 студии Microsoft полностью перешла на свою систему сборки MSBuild (чем-то похожа на Apache Ant… тоже юзают XML…), для задания своих правил в которой используются файлы *.targets, если я не ошибаюсь. Как только я разберусь с MSBuild, сделаю поддержку и для него, но пока эта задача для меня неактуальна.

В общем, делюсь с народом: Правила построения MOC, UIC и RCC для Visual Studio.

С большим удовольствием выслушаю замечания и/или пожелания касательно этих правил.

Ссылки по теме

  1. Задание этапов настраиваемого построения (Specifying Custom Build Steps)
  2. Rule Files
  3. Using the Qt Meta-Object Compiler, User Interface Compiler (uic), Resource Compiler (rcc)
  4. Qt Visual Studio Add-in
blog comments powered by Disqus