Note : J'ai effectué cette installation sur une Ubuntu Dapper Drake, il y a des chances que cela fonctionne sur une Debian unstable, mais je n'en sais strictement rien. ( besoin des paquets QT4 4.1.2). N'ayant jamais travaillé avec autre chose qu'une debian ou ubuntu, vous êtes livré a vous même si vous êtes dans ce cas !!! (voir références en bas du howto)

Je suis actuellement sur un projet C++/QT4 (scolaire), avec binaires windows à rendre. Seul problème, je n'ai plus un seul windows d'installé, que cela soit chez moi, ou sur l'ordinateur que j'utilise en cours !!!

J'ai donc mis en place un environnement de cross-compilation pour produire des binaires windows utilisant QT4, j'ai assez galéré, donc autant en faire profiter le plus grand nombre.

INSTALLATION DE L'ENVIRONNEMENT DE BASE

Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ sudo wine mingw32 mingw32-binutils mingw32-runtime
La vous avez déjà un environnement de cross-compilation simple

On va essayer :

essai.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include <windows.h>
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
  MessageBox(NULL,
    "Cette fenêtre prouve que le cross-compilateur est fonctionnel !",
    "Hello World", MB_OK);
  return 0;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ i586-mingw32msvc-g++ -o essai.exe essai.cpp
Normalement ça compile...

Il faut ensuite récuperer la dll de mingw (et la mettre dans le meme repertoire que l'exe ou ~/.wine/drive_c/windows/system )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ gunzip -c /usr/share/doc/mingw32-runtime/mingwm10.dll.gz > mingwm10.dll
Puis on teste la fenetre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ wine essai.exe
Normalement tout est bon et la fenêtre apparait

Maintenant on va commencer le plus difficile, la mise en place de QT4

AJOUT DES BIBLIOTHEQUES QT4

On récupère les binaires et les paquets de développement QT4 d'ubuntu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ sudo apt-get install libqt4-core libqt4-gui libqt4-qt3support libqt4-sql libqt4-debug-dev libqt4-dev
On récupère également les binaires win32 sur le site de Trolltech
( /!\ 45Mo /!\ )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ wget http://wftp.tu-chemnitz.de/pub/Qt/qt/source/qt-win-opensource-4.1.2-mingw.exe
Puis on les extrait de l'executable grace a wine
Code : Sélectionner tout - Visualiser dans une fenêtre à part
amalsek@amalsek-desktop:~$ wine qt-win-opensource-4.1.2-mingw.exe
Notes: pas besoin de telecharger MinGW durant l'install.
ne pas oublier d'enregistrer les dll dans le registre de wine. (l'installeur vous le demande)

On copie les binaires windows dans un dossier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
amalsek@amalsek-desktop:~$ sudo cp -Rf ~/.wine/drive_c/Qt/4.1.2 /usr/local/
amalsek@amalsek-desktop:~$ sudo mv /usr/local/Qt /usr/local/qt4-win32
Maintenant on va toucher a la configuration de qmake - on va en créer une nouvelle (a partir de celle de windows)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
amalsek@amalsek-desktop:~$ sudo cp -Rf /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++
amalsek@amalsek-desktop:~$ sudo nano /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf
Les lignes a modifier sont les suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
QMAKE_CXX               = i586-mingw32msvc-g++
 
QMAKE_INCDIR            = /usr/i586-mingw32msvc/include/
QMAKE_INCDIR_QT         = /usr/local/qt4-w32/4.1.2/include
QMAKE_LIBDIR_QT         = /usr/local/qt4-w32/4.1.2/lib
 
QMAKE_LINK              = i586-mingw32msvc-g++
 
# ne pas oublier le -mwindows ici
QMAKE_LFLAGS            = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
 
#isEqual(MINGW_IN_SHELL, 1) {
        QMAKE_DIR_SEP           = /
        QMAKE_COPY              = cp
        QMAKE_COPY_DIR          = cp -r
        QMAKE_MOVE              = mv
        QMAKE_DEL_FILE          = rm -f
        QMAKE_MKDIR             = mkdir -p
        QMAKE_DEL_DIR           = rm -rf
#} else {
#       QMAKE_COPY              = cp
#       QMAKE_COPY_DIR          = cp -r
#       QMAKE_MOVE              = mv
#       QMAKE_DEL_FILE          = rm -f
#       QMAKE_MKDIR             = mkdir -p
#       QMAKE_DEL_DIR           = rm -rf
#}
 
# Enlever les .exe et rajouter -qt4
QMAKE_MOC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc-qt4
QMAKE_UIC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic-qt4
 
# Je n'ai pas trouvé d'équivalent de ce fichier, j'ai quand meme enlevé le .exe
QMAKE_IDC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
 
QMAKE_RC                = i586-mingw32msvc-windres
 
QMAKE_STRIP             = i586-mingw32msvc-strip
A partir de la, normalement l'environnement est configuré. Pour compiler votre projet QT4, allez dans la racine de celui-ci et faites :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
amalsek@amalsek-desktop:~$ qmake-qt4 -project
amalsek@amalsek-desktop:~$ qmake-qt4 -spec win32-x-g++
amalsek@amalsek-desktop:~$ make
Note: Si la compilation échoue car il manque des fichier du type "libQtGui_Debug", il est possible qu'il y ait besoin de rajouter la ligne "CONFIG -= debug" dans le fichier .pro généré par qmake-qt4 -project

L'exécutable se trouve placé dans le répertoire release/ . Vous pouvez maintenant le lancer grace a la commande wine monprojet.exe !!!

Si vous avez des commentaires ou des améliorations, n'hésitez pas !!!

Mes sources :
http://silmor.de/29
http://www.dumbbell.fr/howto/win32-c...lation.fr.html