Всем доброго времени суток!
Думаю многие из вас знакомы с таким мощным кросс-платформенным инструментарием, как Qt и насущной проблемой сборки Qt с Visual Studio. Работал я раньше с версией 4.8 и бед не знал, пока начальство не заставило не дало указание переходить на новую, недавно вышедшую, 5 версию. К слову сказать, сам переход проблем не вызвал, да вот понадобилось использовать Qt в Visual Studio (обсуждение необходимости данной меры выходит за рамки этого топика).
Последний раз, собирать Qt в Visual Studio мне приходилось 2 года назад, еще с версией 4.7.3 и, честно сказать, положительный эмоций от этой сборки у меня осталось мало не осталось. Как сейчас помню, необходимо было, минут 10-15 конфигурировать исходники Qt, а дальше в работу вступал jom, а работа его длилась ~3-4 часа (на моем Core i5-2430M). Только после сих деяний можно было писать на Qt в студии.
Перспектива повторения этих операций меня не радовала. Прочитав на хабре пару статей о попытках сборки Qt в Visual Studio выяснил, что теперь дела обстоят еще печальнее, для сборки необходимы: ActivePerl, Python, Ruby, ICU, плюс ко всему, весь процесс сборки теперь длится в разы дольше:
nmake собирал qtwebkit уже часов 8 к ряду. Сейчас прошло уже более суток с момента последнего запуска nmake
С грустной миной на лице, с осознанием всего наваливающегося груза, я поставил на скачивание исходники, перл и т.д. Без надежды на успех, решил попробовать подключить библиотеки Qt к Visual Studio так, как это делается с некоторыми библиотеками для использования WinAPI и, я долго не мог поверить, но — получилось! А теперь обо всем по порядку и подробней (хотя подробно даже нечего описывать, все весьма просто и думаю, что я отнюдь не первый, кто до этого додумался).
Предполагается, что Вы имеете уже установленные:
- Microsoft Visual Studio 2010/2012
- Qt5 msvc2010/2012
Шаг 1: Настройка окружения
Допустим, при установке Qt, вы выбрали путь: «C:Qt», в таком случае, в этой папке у вас будут созданы папки 5.0.2, Licenses и т.д.
Устанавливаем следующие переменные окружения:
QTDIR = C:Qt5.0.2msvc2010
QMAKESPEC = win32-msvc2010
В переменную PATH добавляем путь: C:Qt5.0.2msvc2010bin
Рекомендуется перезагрузить компьютер после сделанных изменений (в Windows же все-таки работаем, ребят)
Шаг 2: Visual Studio Add-In
Далее просто скачиваем Visual Studio Add-in for Qt5 (не работает с Express Edition) и устанавливаем в любую папку, местонахождение студии будет определено автоматически. Я установил в C:QtQt5VSAddin.
Шаг 3: Использование Qt в VS
Да, именно использование! Уже на третьем шаге, без ручных сборок и т.д. Если Вы все правильно сделали (а что можно было сделать неправильно?), в Visual Studio появится вкладка Qt5, где версия Qt должна определиться автоматически, если этого не произошло, было неправильно настроено окружение и необходимо вручную указать путь к qmake (а лучше все-таки корректно настроить окружение, ибо без него скорее всего собираться проект не будет).
Создаем проект Qt5 (можно открыть имеющийся *.pro-файл, через меню Qt5). Пишем всеми любимый «Hello, World!»:
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello world!");
label->show();
return app.exec();
}
Если попробовать собрать данный проект, в момент линковки возникнут ошибки в виде «ссылок на неразрешенные внешние элементы». Чтобы это исправить надо, между директивами #include и функцией main добавить еще одну директиву:
#pragma comment(lib, "Qt5Widgets.lib")
В последствии, от добавления этой препроцессорной директивы (нужно будет добавлять еще Qt5Core, Qt5Gui и т.д.) можно избавиться простой настройкой свойств проекта, т.е. добавить в дополнительные каталоги включаемых файлов:
$(QTDIR)include;$(QTDIR)includeQtCore;$(QTDIR)includeQtGui;$(QTDIR)includeQtWidgets и т.д.
В дополнительные каталоги библиотек:
$(QTDIR)lib
Ну и соответственно, в зависимости:
qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib и т.д.
P.S. Надеюсь, что найдутся люди, для которых данная статься окажется-таки полезной
P.S.S Возможно, есть некий смысл именно собирать Qt из исходников под Visual Studio, если так, то приношу глубочайшие извинения. Мне пока что явная сборка не понадобилась, при такой интеграции Qt в Visual Studio был успешно написан уже один большой проект, который, ко всему прочему, использует ICE (с которым тоже долго возились в плане сборки, в итоге нормально работать с ним получилось только в студии, собственно, это и есть та необходимость интеграции Qt в студию, о которой говорилось в самом начале).
Автор: Renzo