====== 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;