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.bat, prepare.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.
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ć 🙂