====== Crosscompilare progetto QT per windows su di una linuxbox ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//8/05/2014//** \\ \\
{{programmazione:qt:qt-test-linux.png|}} {{programmazione:qt:qt-test-win32.png|}} \\
In questo articolo realizzeremo un "hello world" in qt e C++ e poi lo compileremo sia per Linux che per Windows. Il tutto,ovviamente, sulla nostra Linuxbox.Per quanto riguarda il codice dell'esempio (banale) ci rifacciamo al [[http://qt-project.org/wiki/getting_started_with_qt_italian|tutorial ufficiale qt in italiano]].
===== Il codice =====
**main.cpp**
#include
#include
int main(int argv, char **args)
{
QApplication app(argv, args);
//Gli oggetti della mia GUI
QTextEdit textEdit;
textEdit.setText("Ciao mondo!");
QPushButton quitButton("Quit");
//Il layout che conterra' gli oggetti
QVBoxLayout layout;
layout.addWidget(&textEdit);
layout.addWidget(&quitButton);
//La finestra che conterra' il layout
QWidget window;
window.setLayout(&layout);
window.show();
//Callback per l'uscita dall'applicazione dopo il click sul pulsante
QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
return app.exec();
}
===== Compiliamo il nostro progetto su Linux =====
Cominciamo con il dire che il contenuto della cartella deve comprendere solamente i file sorgenti in cpp e nessun altro residuo di altre compilazioni precedenti, magari per altre piattaforme.Quindi nel nostro caso la cartella conterra solamente il file ''main.cpp'' .
Per la compilazione su linux basta installare i pacchetti di sviluppo delle Qt qualora non sia disponibile il pacchetto all in one per la nostra distribuzione. Ecco i passi necessari per la compilazione con Qt4.8:
qmake-qt4 -project
qmake-qt4
make
Dove:
* **qmake-qt4 -project** (genera il file di configurazione per il progetto QT-hello-world.pro);
* **qmake-qt4** (genera il Makefile);
* **make** compila il progetto;
===== Crosscompiliamo il nostro progetto per Windows su Linux =====
Crosscompileremo staticamente il nostro progetto grazie all'ambiente di crosscompilazione [[http://mxe.cc/|MXE]] . //MXE (M cross environment) is a Makefile that compiles a cross compiler and cross compiles many free libraries such as SDL and Qt. Thus, it provides a nice cross compiling environment for various target platforms. // \\
Assicuriamoci che il contenuto della cartella comprenda solamente i file sorgenti in cpp e nessun altro residuo di altre compilazioni precedenti, magari per altre piattaforme.Quindi nel nostro caso la cartella conterra solamente il file ''main.cpp'' . Fatto cio' installiamo MXE come mostrato in questa [[http://mxe.cc/#tutorial|guida]].
==== Procediamo allo scaricamento e installazione delle Qt tramite mxe ====
Adesso siamo pronti per preparare il nostro sistema mxe per scaricare e compilare Qt \\ \\
Dalla root di mxe lanciamo
make qt
Mxe scarichera' e compilera' Qt e tutte le sue dipendenze. Il processo è molto lungo e su macchine lente puo' durare molto. (su un Pentium 4 con 2GB di ram è durato quasi 12 ore). \\
Fatto cio' possiamo mettere in $PATH l'installazione di MXE in modo da richiamare gli eseguibili piu' comodamente. Quindi aggiungiamo al nostro ''.bashrc'' la seguente riga:
export PATH=/Percorso dove è installato MXE/usr/bin:$PATH
A questo punto siam gia' pronti per crosscompilare i nostri progetti. Portiamoci nella cartella che contiene il nostro file **main.cpp** e diamo i seguenti comandi:
i686-pc-mingw32-qmake -project
i686-pc-mingw32-qmake
make
Dove:
* **i686-pc-mingw32-qmake -project** (genera il file di configurazione per il progetto QT-hello-world.pro);
* **i686-pc-mingw32-qmake** (genera il Makefile);
* **make** compila il progetto;