Управление проектами в Qt Creator: qmake

Я плотно сижу на Qt. ИМХО, C++ — наиболее универсальный язык программирования, и он теоретически подходит для всего. В том числе и для десктопных приложений, что лично меня интересует больше всего. Ну а раз десктопные приложения на C++, то тогда — Qt, причем практически без вариантов. Благо, Qt спроектирован весьма и весьма неплохо, и программировать с помощью этой библиотеки обычно одно удовольствие, так что отсутствие выбора не напрягает.

Что? Десктопные приложения можно писать отнюдь не только на C++? Я в курсе. Не разводя холивары, просто сформулирую свой подход: я программирую на C++, если есть такая возможность, и при этом не создается больше проблем, чем решается. Сайты я на C++ не делаю — библиотек нормальных что-то нету. И админские скрипты я по-быстрому на Питоне пишу. На iOS все собираюсь податься — там буду использовать Objective C. С мейнстримом всегда меньше геморроя. Так вот, Qt — это в достаточной мере мейнстрим. Если несколько лет назад были проблемы с лицензированием, то уже довольно давно Qt есть под LGPL, так что никаких проблем нет писать коммерческие программы — Nokia оставила свой положительный след в истории Qt.

Раз уж помянул Нокию, хочу сказать финнам большое спасибо за Qt Creator. Эта среда разработки интересна даже сама по себе, а уж с Qt, учитывая плотную интеграцию — так подавно. Когда-то давно я в Visual Studio сидел, но вот уже несколько лет как ушел в Qt Creator и возвращаться все это время не тянуло. Давеча ставил Visual Studio 2012, посмотрел на эту квазимоду, и теперь я активно НЕ хочу возвращаться.

Конечно, в некоторых областях Visual Studio лучше Qt Creator. Например, отладка в VS весьма радует производительностью, в то время как в Qt Creator она заметно тормознутее. Но некоторая неповоротливость отладчика — не особо критичная проблема, жить вполне можно. А вот с чем жить не столь приятно, так это с отсутствием нормального управления построением приложений, состоящим из нескольких проектов. В VS есть solutions — в Qt Creator есть совершенно непонятные мне зависимости между проектами в сессии. Вот в упор не понимаю, зачем оно надо — сессии не являются частью исходников, сохранить эти зависимости нельзя. То же самое можно сказать о настройках проекта, все эти вызовы тулчейна, настройка build и clean и т.п. ИМХО малоинтересны, т.к. сохраняются они в *.pro.user файле, который по определению привязан к локальному компьютеру.

Если не пользоваться Qt Creator для управления проектами, остается использовать средства выбранной build system (как это по-русски?). Qt Creator может предложить следующие варианты.

qmake. Создан Trolltech специально для кроссплатформенного управления проектами с упором на Qt. Существовал как минимум для Qt3; честное слово, не знаю, когда он впервые появился (подозреваю, что существовал с первых версий Qt). У qmake есть как свои плюсы, так и минусы. Из плюсов:

  • очень хорошая интеграция в Qt Creator;
  • можно управлять проектами, не использующими Qt;
  • с помощью скриптовых средств qmake можно реализовать весьма продвинутый функционал для управления проектами;
  • проверен временем;
  • легко пользоваться в случае простых проектов;
  • наваяны тонны исходников, использующих qmake для построения — так что qmake все равно нужен.

Особенно хочу отметить отличную интеграцию Qt Creator с qmake. Структура проекта показывается как иерархия .pri файлов, исходные файлы показываются корректно даже в случае весьма заковыристых скриптов, подсказка в редакторе для #include показывает имена заголовочных файлов из INCLUDEPATH, макросы из DEFINES также определяются и подсвечиваются, и даже их значения известны и показываются отладчиком.

Но есть и большие, жирные минусы:

  • очень неполная и посредственно написанная документация (а изначально — так реально никакая, сейчас хоть азы есть);
  • реализовать даже самый простенький, но нетривиальный функционал — действительно нетривиальная задача.
  • Закрученный и свой собственный синтаксис скриптовых средств, далекий от симпатичного и удобного.

CMake. Кое-какая интеграция в Qt Creator есть, но с qmake не сравнить. Каких-то действительно принципиальных различий между тем, что можно сделать в qmake и CMake я не увидел, зато увидел совершенно жуткий ситаксис. Еще один уродливый скриптовый язычок? Нет уж, увольте.

Любая своя build system. Интеграция с Qt Creator в этом случае крайне ограниченная. И какую же build system использовать? Такое впечатление, что все сидят на CMake, как на лучшей…

qbs, Qt Build System. Свежая разработка от авторов Qt. Выглядит очень хорошо и многообещающе, но пока — это проект в разработке. Скоро должны вроде как выдать что-то более чем менее работающее, в Qt Creator 2.7.0 уже какую-то поддержку qbs добавили. Может, через годик-другой допилится до действительно работающего состояния, и тогда, если интеграция с Qt Creator будет на высоте, я на qbs однозначно перейду. Для заинтересовавшихся темой — несколько ссылок:

Ну а пока я не вижу другого выхода, кроме как продолжать сидеть на qmake.

Недавно вышел Qt 5, я на него переползал. В связи с этим знаменательным событием решил я устроить порядок в своих qmake затычках — привести их в какую-то удобную систему, унифицировать и т.п., а заодно получше разобраться в qmake, раз уж я буду на нем сидеть в ближайшее время. Дело заняло у меня больше времени, чем планировалось, зато получилось неплохо и о qmake я узнал много нового. Этим я и хочу поделиться в своем блоге.

Я планирую описать сам qmake (должен получиться довольно пухлый мануал), и то, что я с его помощью научился делать. Писать о том, чего не знаю — не буду, так что применение qmake будет ограничено Qt 5 на платформе Windows с тулчейнами MSVC и MinGW. Это то, что я использую. На пятерку я перешел полностью, и на Qt 4 свои скрипты даже не проверял.

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

Цикл: qmake

  3 comments for “Управление проектами в Qt Creator: qmake

  1. Роман
    29.08.2013 at 15:37

    Спасибо, автор, очень классные статьи про qmake получились.

    • mgsxx
      29.08.2013 at 15:41

      Спасибо, я старался 🙂
      По-русски по qmake реально ничего нет (не было 😉 ), да и по-английски тоже не густо.

  2. Влад
    05.01.2014 at 04:21

    Спасибо большое! Очень интересно и по делу. С удовольствием читаю.

Добавить комментарий