четверг, 7 апреля 2011 г.

Сборка Qt 4.7.1 static для Windows CE 6.0

Удалил по ошибке, возвращаю на место :-).

Сборка Qt 4.7.1 static для Windows CE 6.0
Прочитав эту статью начал копать, как такое сделать для Windows CE 6.0. В данной статье я не рассматриваю сборку с кастомным SDK, так как входе экспериментов так и не удалось собрать, в то же время с SDK для WinMobile все собралось и работает.

Для сборки потребуется:
Qt libraries 4.7.1 for Windows CE;
Windows Mobile 6 Professional SDK Refresh;
MSVS 2005, можно и 2008, но из-за некоторых ограничений я использовал эту версию, и также говорят, что с 2008 бывают проблемы.

После сборки получим собранную библиотеку, с включенным VS Runtime, т.е. зависимостей от каких-либо *.dll не будет.

Итак, поехали.
Шаг 1.

Устанавливаем Windows Mobile SDK в путь по умолчанию. Распаковываем Qt в корень диска C (к примеру, C:\Qt\4.7.1).

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

Переходим путь_до_qt\mkspecs\win32-msvc2005\. Открываем файл qmake.conf

Заменяем:
CONFIG                  += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll
QMAKE_CFLAGS_RELEASE    = -O2 -MD

QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MDd

На:
CONFIG                  += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target

QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MTd

Открываем путь_до_qt\mkspecs\common\wince\qmake.conf

Заменяем:
CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe

QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_DEBUG    = -DDEBUG -D_DEBUG -Zi -MDd

На:
CONFIG += qt warn_on release incremental  flat link_prl precompile_header autogen_precompile_source copy_dir_files  debug_and_release debug_and_release_target

QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_DEBUG    = -DDEBUG -D_DEBUG -Zi -MTd

Шаг 3.
Запускам Visual Studio Command Promt. Выполняем команду:
cd путь_до_qt

Далее нужно выполнить конфигурирование, я приведу свой конфиг. Список всех доступных опций можно получить, вызвав configure с параметров -help. В моем конфиге нет WebKit, OpenSSL и сборки примеров. Важно отключать различные опции процессора, такие как MMX. Иначе библиотека соберется, но программы работать не будут, т.е. при запуске ничего не будет происходить. Если у вас несколько ядер, то можно добавить опцию -mp, чтобы распараллелить процесс сборки.

configure -xplatform wincewm60professional-msvc2005 -debug-and-release -opensource -nomake examples -nomake demos -no-mmx -no-iwmmxt -no-3dnow -no-sse -no-sse2 -no-webkit -no-stl -no-qt3support -no-opengl -no-openvg -no-openssl -no-native-gestures -no-s60 -no-accessibility -D QT_NO_CLIPBOARD -D QT_NO_ACCESSIBILITY -D QT_NO_SESSIONMANAGER -D NO_GETENV

Шаг 4.
Если configure прошло без проблем, то, во-первых, если собирали с линковкой рантайма, то перейдя в каталог bin в папке Qt и посмотрев зависимости любого *.exe(F3 в Total Commander, если установлен plugin Listener), например, moc.exe, то в списке необходимых *.dll не должно быть msvcrt*.dll.

Во-вторых, в открытой консоли переходим в каталог bin:
cd bin

Далее выполняем:
checksdk - list

В списке находим нужный нам SDK( Windows Mobile 6 Professional), и копируем эту строчку полностью. Далее:
checksdk -sdk "имя_sdk" -script wce6.bat
wce6.bat

Шаг 5.
В консоли пишем:
cd ..
nmake
и начинается этап сборки, который может занять до часа времени, в зависимости от производительности ПК.

Шаг 6.
Для того чтобы собрать любой из примеров, нужно в открытой консоли перейти в каталог с примером и выполнить следующие команды:
qmake
nmake

Для того чтобы qmake сгенерировал проект для VS, то нужно qmake запустить с параметром -tp vc. После чего можно открыть проект в VS, и если установлен VS Add-in, то собрать в ней.

Сам я разрабатываю пока так: пишу весь проект в Qt Creator для Windows(используя Qt SDK for Windows), а для сборки под Windows CE делаю qmake && nmake(см. выше пункт с примерами).

Известные мне проблемы:

Не компилируется проект, созданный VS Addin в VS2005(возможно 2008) и завершается ошибкой PRJ002. Это проблема самого аддина, о чем говорят на форумах троллей, и потому единственный путь получить рабочий проект - это создать проект в Qt Creator и получить из него проект для VS с помощью команды qmake -tp vc.

Несмотря на то, что собирали с поддержкой Phonon, проекты с ним не собираются. Это ограничение вызвано тем, что Phonon - это плагин, а при статической сборке плагины отключаются. Поэтому в опциях configure можно добавить:

-no-phonon -no-phonon-backend

Важно: в дальнейшем, для сборки из VS Command Promt обязательно предварительно запускать скрипт wce6.bat из папки bin Qt, для установки всех необходимых путей!

Комментариев нет:

Отправить комментарий