четверг, 21 октября 2010 г.

Qt 4.4.3, MinGW, Qt Creator и статическая линковка

Так вот. Линковка по умолчанию занимает 15гиг на винте и 5+ часов. А все почему? А потому, что там примеры и туториалы разные линкуются тоже. Понял я это на утро второго дня. Вообще в линковку через батнички и все такое я втыкал по ходу дела. Отвык уже от командной строки. Свой выбор я сделал еще в 1998 году и привык жмакать на всякие кнопочки на разных формочках. Вобщем, в конце концов я все-таки нашел и немного грубовато заставил линковать только Src папку и вспомогательные тулзы. Как - об этом ниже. Результат - линковка занимает меньше 2х часов на моей машинке.
Значит так. Путем экспериментов у меня получились следующие файлы:
mmake.bat:
call bin\qtvars.bat
pause
configure -static -release -no-exceptions -no-qt3support -qt-gif -qt-libpng -qt-libjpeg -no-phonon -no-webkit -no-phonon-backend -no-assistant-webkit -platform win32-g++
pause
make src
Лежать он должен в папке %QTDIR%. В моем случае я сделал отдельную папку для сборки “static release” - C:\Programming\Qt\4.4.3-1\
Файл qtvars.bat:
echo Setting up a Qt environment...
 
set QTDIR=C:\Programming\Qt\4.4.3-1
echo -- QTDIR set to C:\Programming\Qt\4.4.3-1
set PATH=C:\Programming\Qt\4.4.3-1\bin;%PATH%
echo -- Added C:\Programming\Qt\4.4.3-1\bin to PATH
set MINGWDIR=C:\Programming\MinGW
echo -- MINGWDIR set to C:\Programming\MinGW
set PATH=C:\Programming\MinGW\bin;%PATH%
echo -- Added C:\Programming\MinGW\bin to PATH
set QMAKESPEC=win32-g++
echo -- QMAKESPEC set to "win32-g++"
Файл должен находиться в папке %QTDIR%\bin\.
Далее надо поправить строчку в файле qmake.conf:
QMAKE_LFLAGS_DLL        = -static
Файл лежит в папке %QTDIR%\mkspecs\win32-g++\. Напоминаю, настройки для MinGW, для Студии будет в другом месте и другие строчки. Я настраивал, сохранил кучу текста/подсказок. Возможно со временем напишу инструкцию по линковке и подключению в Visual Studio, но позже. Мне Qt Creator понравился, для моих нужд - самое оно!
И, наконец, шаманим projects.pro файл:
#process the projects
for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) {
    isEqual(PROJECT, tools) {
       !cross_compile:SUBDIRS += tools
       else:SUBDIRS += tools/qtestlib
    } else:isEqual(PROJECT, examples) {
#       SUBDIRS += examples
    } else:isEqual(PROJECT, demos) {
#       SUBDIRS += demos
    } else:isEqual(PROJECT, libs) {
       include(src/src.pro)
    } else:isEqual(PROJECT, docs) {
       contains(QT_BUILD_PARTS, tools):include(doc/doc.pri)
    } else:isEqual(PROJECT, translations) {
       contains(QT_BUILD_PARTS, tools):include(translations/translations.pri)
    } else:isEqual(PROJECT, qmake) {
#      SUBDIRS += qmake
    } else {
       message(Unknown PROJECT: $$PROJECT)
    }
}
Файл лежит в %QTDIR%. По сути, я просто закомментировал добавление в CONFIG папки с демками и примерами. У команды config есть ключ -fast, он тоже собирает только сорцы, без лишних вещей, но, по-моему, он еще не собирает папку tools и еще что-то.
Ну вот с настройками и все собственно. Запускаем cmd, в нем >mmake.bat и ждем пока все сконфигурируется и слинкуется.
Коротко про конфигурирование. Фонон нельзя собирать в статике, Веб-Кит тоже. Лицензия не позволяет, однако. Мне и не надо, собирать с ними статику не пробовал. Эта сборка для release. Пишу и дебажу в shared сборке, она у меня лежит в отдельной папке (4.4.3 для shared debug и 4.4.3-1 для static release). Есть проблема с загрузкой jpeg файлов. Посоветовали добавить Q_IMPORT_PLUGIN( qjpeg ) в программу и QTPLUGIN += qjpeg в файл проекта. Будем посмотреть.
Со сборкой вроде все. Буду редактировать, если что вспомню. Вообще как само-цель - сделать из блога мини-справку, возможно не так уж и мини, по Qt. Буду своими словами объяснять, что понял из книг и работы с библиотекой.

Взято: http://www.learnqt.com/category/how-to-learn-qt/qt-install/

1 комментарий:

  1. Cheap Chinese imported to the U.S. from China, China and Japan
    Cheap Chinese imported to the U.S. titanium dog teeth from China, China titanium nipple bars and Japan. Chinese imports does titanium have nickel in it in this case were China, the titanium knee replacement United States of America, titanium band rings

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