Имеется:
Qt 4.8.3, Windows CE 6.0 R3, Visual Studio 2008 SP1, Windows 7 (64bit) и свой SDK, собранный в Platform Builder.
1. Разархивировал qt-everywhere-opensource-src-4.8.3 в C:\qt\4_8_3_ce
2. Установил qt для студии в папку C:\qt\4_8_3_vs2008, установил AddIn в студию
3. Для статичной сборки поправил файлы:
c:\qt\4_8_3_ce\mkspecs\common\wince\qmake.conf
Bash
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
c:\qt\4_8_3_ce\mkspecs\win32-msvc2008\qmake.conf
Bash
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
4. В каталоге c:\qt\4_8_3_ce\mkspecs\ создал папку для custom sdk
wincewm60testSDK-armv4i-msvc2008
4.1 Добавил файлы default_post.prf, qmake.conf, qplatformdefs.h
default_post.prf:
Bash
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
contains(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
qplatformdefs.h:
Bash
#include "../common/wince/qplatformdefs.h"
qmake.conf:
Bash
include(../common/wince/qmake.conf)
CE_SDK = test SDK # replace with actual SDK name
CE_ARCH = ARMV4I
DEFINES += STANDARDSHELL_UI_MODEL _WIN32_WCE=0x600 $$CE_ARCH _ARMV4I_ armv4i _ARM_ ARM _M_ARM ARM _WIN32 __arm__
DEFINES += WINCE _WINDOWS _UNICODE UNICODE Q_OS_WINCE_WM QT_NO_PRINTER QT_NO_PRINTDIALOG QT_NO_DRAGANDDROP QT_NO_CLIPBOARD QT_NO_WIN_ACTIVEQT
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:WINDOWSCE,6.00 /MACHINE:THUMB /ENTRY:mainACRTStartup
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWSCE,6.00 /MACHINE:THUMB
QMAKE_LFLAGS_DLL = /SUBSYSTEM:WINDOWSCE,6.00 /MACHINE:THUMB /DLL /SAFESEH:NO
QMAKE_LIBFLAGS_RELEASE = /LTCG
QMAKE_LIBS = corelibc.lib coredll.lib
QMAKE_LIBS_CORE = libcmt.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib
QMAKE_LIBS_GUI = ceshell.lib ole32.lib qmenu_wince.res $$QMAKE_LIBS_CORE
QMAKE_LIBS_NETWORK = ws2.lib $$QMAKE_LIBS_GUI
QMAKE_LIBS_OPENGL =
QMAKE_LIBS_COMPAT =
QMAKE_RC = rc /DUNDER_CE=600 /D_WIN32_WCE=0x600
5. Запускаю командную строку VS2008 от имени администратора. перехожу в каталог c:\qt\4_8_3_ce и выполняю конфигурацию:
Bash
configure -platform win32-msvc2008 -xplatform wincewm60testSDK-armv4i-msvc2008 -static -debug-and-release -opensource -no-style-windows -no-stl -no-exceptions -no-sql-sqlite -no-declarative -no-webkit -no-gif -no-libpng -no-libmng -no-libtiff -no-libjpeg -nomake examples -nomake demos -no-multimedia -no-audio-backend -no-mmx -no-iwmmxt -no-3dnow -no-sse -no-sse2 -no-qt3support -no-openssl -no-native-gestures -no-s60 -no-phonon -no-phonon-backend -D QT_NO_DRAGANDDROP -D QT_NO_CURSOR -D QT_NO_CLIPBOARD -D QT_NO_ACCESSIBILITY -D QT_NO_SESSIONMANAGER -D NO_GETENV
6. Все вроде конфигурируется:
Bash
Qt is now configured for building. To start the build run:setcepaths.bat wincewm60testSDK-armv4i-msvc2008 && nmake.
To reconfigure, run 'nmake confclean' and configure.
7. батник setcepaths.bat не найдет мой sdk. Поэтому обращаюсь к checksdk, получаю список доступных SDK, создаю батник tmp.bat и устанавливаю переменные окружения
Bash
c:\qt\4_8_3_ce>bin\checksdk.exe -list
Available SDKs:
SDK Name: Pocket PC 2003 (ARMV4)
SDK Name: Smartphone 2003 (ARMV4)
SDK Name: Windows Mobile 5.0 Pocket PC SDK (ARMV4I)
SDK Name: Windows Mobile 5.0 Smartphone SDK (ARMV4I)
SDK Name: Windows Mobile 6 Professional SDK (ARMV4I)
SDK Name: test SDK (ARMV4I)
SDK Name: STANDARDSDK_500 (ARMV4I)
SDK Name: STANDARDSDK_500 (x86)
SDK Name: STANDARDSDK_500 (SH4)
SDK Name: STANDARDSDK_500 (MIPSII)
SDK Name: STANDARDSDK_500 (MIPSII_FP)
SDK Name: STANDARDSDK_500 (MIPSIV)
SDK Name: STANDARDSDK_500 (MIPSIV_FP)
SDK Name: SMDK6400_SDK (ARMV4I)
c:\qt\4_8_3_ce>bin\checksdk.exe -sdk "test SDK (ARMV4I)" -script tmp.bat
8. Содержимое tmp.bat:
Bash
@echo off
echo Environment Selection:test SDK (ARMV4I)
set PATH=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\bin\x86_arm;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin;$(WindowsSdkDir)\bin;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common\Tools;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common\IDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\;$(FrameworkSDKDir)Bin;%PATH%
set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\include;C:\Program Files (x86)\Windows CE Tools\wce600\test SDK\include\ARMV4I;C:\Program Files (x86)\Windows CE Tools\wce600\test SDK\include;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include;C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SQL Server\Mobile\v3.0
set LIB=C:\Program Files (x86)\Windows CE Tools\wce600\test SDK\lib\ARMV4I;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\atlmfc\lib\ARMV4I;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\lib\ARMV4I
9.Выполняю команду:
Bash
nmake sub-src
Малость компилится и падает с ошибкой.
Bash
...
qguiplatformplugin.cpp
qapplication_win.cpp
kernel\qapplication_win.cpp(52) : fatal error C1083: Cannot open include file: 'windowsm.h': No such file or directory
qclipboard_win.cpp
qcursor_win.cpp
qdesktopwidget_win.cpp
qdnd_win.cpp
qmime_win.cpp
qsound_win.cpp
Generating Code...
Compiling...
qwidget_win.cpp
kernel\qwidget_win.cpp(1756) : warning C4189: 'extra' : local variable is initialized but not referenced
qole_win.cpp
qkeymapper_win.cpp
qwinnativepangesturerecognizer_win.cpp
qsound.cpp
qguifunctions_wince.cpp
Generating Code...
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\bin\x86_arm\cl.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
c:\qt\4_8_3_ce>
В этом месте затык. Делал аналогичную сборку с wincewm60professional-msvc2008 - все скомпилировалось, собрал тестовое приложение - на моем девайсе работает. Но очень нужна возможность отладки, поэтому пытаюсь сделать сборку для своего SDK.
Кто может подсказать?
Удалось скомпилировать. Необходимо было вместо:
Bash
DEFINES += WINCE _WINDOWS _UNICODE UNICODE Q_OS_WINCE_WM QT_NO_PRINTER QT_NO_PRINTDIALOG QT_NO_DRAGANDDROP QT_NO_CLIPBOARD QT_NO_WIN_ACTIVEQT
написать:
Bash
DEFINES += WINCE _WINDOWS _UNICODE UNICODE Q_OS_WINCE QT_NO_PRINTER QT_NO_PRINTDIALOG QT_NO_DRAGANDDROP QT_NO_CLIPBOARD QT_NO_WIN_ACTIVEQT
Флаг Q_OS_WINCE_WM подключает файлы необходимые для windows mobile.
И при конфигурации я зря поставил флаг -no-style-windows.
Bash
configure -platform win32-msvc2008 -xplatform wincewm60testSDK-armv4i-msvc2008 -static -debug-and-release -opensource -no-stl -no-exceptions -no-sql-sqlite -no-declarative -no-webkit -no-gif -no-libpng -no-libmng -no-libtiff -no-libjpeg -nomake examples -nomake demos -no-multimedia -no-audio-backend -no-mmx -no-iwmmxt -no-3dnow -no-sse -no-sse2 -no-qt3support -no-openssl -no-native-gestures -no-s60 -no-phonon -no-phonon-backend -D QT_NO_DRAGANDDROP -D QT_NO_CURSOR -D QT_NO_CLIPBOARD -D QT_NO_ACCESSIBILITY -D QT_NO_SESSIONMANAGER -D NO_GETENV