Gcc, którego używam pod Windowsami, to mingw w wersji tdm (http://tdm-gcc.tdragon.net/). Aby skompilować pod niego Qt4 (target na x86), trzeba chwilkę na to poświęcić… oto, jak ja sobie z tym radzę:

Gcc mam w katalogu C:\gcc\gcc-4.7.1-tdm. Ogólnie, w systemie mam jeszcze kilka innych kompilatorów, na co będzie trzeba zwrócić za chwilę uwagę, zmieniając zmienne środowiskowe INCLUDE i LIB, bo inaczej zrobi się lekki burdel…

Zakładam katalog C:\Qt\4.8.3, w nim rozpakowuję źródła Qt (podkatalog qt-everywhere-opensource-src-4.8.3) oraz zakładam katalog docelowy, do którego wykonam builda (mingw32). Mój Perl znajduje się w katalogu C:\Perl. Najpierw dwie małe modyfikacje źródeł:

Edytujemy plik C:\Qt\4.8.3\qt-everywhere-opensource-src-4.8.3\projects.pro:

} else:isEqual(PROJECT, examples) {
# SUBDIRS += examples
} else:isEqual(PROJECT, demos) {
# SUBDIRS += demos

Oczywiście, jeżeli masz zamiar zbudować od razu examplesy, to nie wykonujesz tego kroku. Następnie, edytujemy plik C:\Qt\4.8.3\qt-everywhere-opensource-src-4.8.3\mkspecs\win32-g++\qmake.conf:

QMAKE_CC = mingw32-gcc
QMAKE_CXX = mingw32-g++
QMAKE_LINK = mingw32-g++
QMAKE_LINK_C = mingw32-gcc
QMAKE_CFLAGS = -fno-keep-inline-dllexport
QMAKE_CFLAGS_RELEASE = -Os -fomit-frame-pointer -funroll-loops

Teraz przystępujemy do zorganizowania sobie środowiska budującego. W katalogu C:\Qt\4.8.3\mingw32 zakładamy pliki setvars.batprepare.bat oraz build.bat:

setvars.bat:

set PATH=C:\gcc\gcc-4.7.1-tdm\bin;C:\Perl\bin;
set INCLUDE=C:\gcc\gcc-4.7.1-tdm\include
set LIB=C:\gcc\gcc-4.7.1-tdm\lib
set LANG=en

prepare.bat:

call setvars.bat
C:\Qt\4.8.3\qt-everywhere-opensource-src-4.8.3\configure.exe ^
-opensource -confirm-license ^
-platform win32-g++ ^
-xplatform win32-g++ ^
-shared ^
-debug-and-release ^
-no-qt3support ^
-qt-style-windows ^
-qt-style-windowsxp ^
-qt-style-windowsvista ^
-no-phonon ^
-no-webkit ^
-plugin-sql-sqlite ^
-plugin-sql-odbc ^
-qt-zlib ^
-qt-libpng ^
-qt-libjpeg ^
-qt-libtiff ^
-qt-libmng ^
-no-openssl ^
-no-dsp ^
-no-vcproj ^
-no-incredibuild-xge ^
-no-cetest ^
-no-s60 ^
-fast ^
-I C:\gcc\gcc-4.7.1-tdm\include ^
-L C:\gcc\gcc-4.7.1-tdm\lib

build.bat:

call setvars.bat
mingw32-make -j 4

I konfigurujemy całe środowisko uruchamiając prepare.bat. Jeżeli będziemy chcieli coś zmienić w konfiguracji, trzeba usunąć wszystko, co powstało w tym katalogu i ponownie uruchomić prepare.bat. Przyjrzyj się dokładnie opcjom w pliku prepare.bat, jeżeli chcesz, możesz coś tam zmienić (np. możesz chcieć kompilować WebKit – ale ostrzegam, że to dość spora kobyła).

Jeżeli wszystko się udało, uruchamiamy build.bat i idziemy na długi spacer 🙂

 

PS.

Dla wersji 64-bitowej, postępujemy dokładnie tak samo. Zakładając, że  nasze gcc ma przedrostek x86_64-w64-mingw32, modyfikujemy tylko mkspecs i gotowe – można budować 🙂

 

PS2.
Okazuje się, że w Qt 4.8.3 jest jeden błąd, który należy naprawić, zanim uda nam się zbudować wersję 64-bitową z gcc. Poniższy fix jest brzydki, ale działa (uwaga: ten fix jest tylko i wyłącznie dla Windows, nie wolno go wprowadzać dla linuksa!). Edytujemy plik C:\Qt\4.8.3\qt-everywhere-opensource-src-4.8.3\src\3rdparty\javascriptcore\JavaScriptCore\jit\ExecutableAllocatorFixedVMPool.cpp:

zmieniamy:

#if ENABLE(EXECUTABLE_ALLOCATOR_FIXED) 

na:

#if 0 

Od tej pory można budować 🙂