Qt és C++ , *.exe létrehozás Linux alól

 ( zolti | 2009. június 23., kedd - 18:53 )

Ismerkedni kezdtem a Qt és C++ -al ez az irodalom alapján:
http://www.qtrac.eu/C++-GUI-Programming-with-Qt-4-1st-ed.zip
Az első alkalmazás Hello Qt lefordítása után felmerült bennem a kérdés, hogyan tudok Linux alól win-en is futtatható exe-t fordítani?

Kevés angol tudásommal én azt következtettem ki a könyvből, hogy olyan programot fordit amilyen környezetben használjuk a fordítót.

Elég hitetlenek találom ezért rákérdezek, hogy tudok Linux alól win-en is futtatható exe-t fordítani?

forrás[hello.cp]:

#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton hello("Hello world!");
hello.resize(100, 30);
hello.show();
return app.exec();
}

parancsok:
qmake -project

Létrejön egy qt.pro fájl a könyvben hello.pro (ezt nem tudom miért nem egyezik, de nem érdekes)
qmake qt.pro
Létrejön egy Makefile fájl
make
Létrejön egy qt nevű futtatható fájl.

Azt szeretném ha létrejönne qt.exe is és azt kipróbálhatnám wine-vel.

Szerkesztve:
Ubuntu 8.10 -et használok

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A MinGW nevű cross compiler-t kell használnod g++ helyett.
Nem tudom milyen disztribúciót használsz, nekem ubuntu 9.04 van, és benne van a repóban mingw32 néven.

Szerk.: így néz ki egy egyszerű c++ programo fordítása mingw-vel:
i586-mingw32msvc-g++ -Wall hello.cpp -o hello

zolti@zolti:~/documents/qt$ i586-mingw32msvc-g++ hello.cpp
hello.cpp:1:28: error: QApplication: Nincs ilyen fájl vagy könyvtár
hello.cpp:2:27: error: QPushButton: Nincs ilyen fájl vagy könyvtár
hello.cpp:13:6: warning: no newline at end of file
hello.cpp: In function ‘int main(int, char**)’:
hello.cpp:6: error: ‘QApplication’ was not declared in this scope
hello.cpp:6: error: expected `;' before ‘app’
hello.cpp:8: error: ‘QPushButton’ was not declared in this scope
hello.cpp:8: error: expected `;' before ‘hello’
hello.cpp:9: error: ‘hello’ was not declared in this scope
hello.cpp:12: error: ‘app’ was not declared in this scope

természetesen linkelni kell a megfelelő qt könyvtárat(úgyanúgy mint g++ -nál). De szerintem egyszerűbb ha a Makefileban a

...
CXX           = g++
...

sort átírod így:

CXX           = i586-mingw32msvc-g++

(Nem próbáltam még, de gondolom működik)

make: Nothing to be done for `first'.

azt olvastam:
http://lists.trolltech.com/qt-interest/2006-03/thread00351-0.html
át kell irni a qmake.conf-ot.

Nem foglalkozom tovább vele, tanulni jó lesz így is.
Később ha valamit akarok vele kezdeni majd megint előveszem a témát.

esetleg egy make clean-t ha lefuttatsz előtte?
Amúgy ez csak egy tipp. Ami azt illeti qt projektet nem fordítottam mingw-vel linuxon, csak egyszerűbb progikat, azok simán lefordultak.
Valószínűnek tartom, hogy előbb be kell majd másolni a Qt-s header fájlokat a mingw include könyvtárába (nálam /usr/lib/gcc/i586-mingw32msvc -n belül van), de ezügyben google meg a mingw weboldala szerintem okosabb mint én :P Nézz utána ;)

Szerk.:
Nem foglalkozom tovább vele, tanulni jó lesz így is
Én is mostanság kezdtem Qt-t tanulni és én is kb ugyanitt untam meg a dolgot(gondoltam majd ha winre is le akarok fordítani valamit, majd jobban belemerülök a témába) :DD

A QMAKESPEC-et kell atirni mingw-sre, vagy a qmake-nak -spec parameterrel megadni a mingw-t kezelo specet.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

"Létrejön egy qt.pro fájl a könyvben hello.pro (ezt nem tudom miért nem egyezik, de nem érdekes)"
A projektfájl neve a könyvtár nevével egyezik meg, melyben a forrás van.

Ok köszi. Így már ezt a részét értem.

eleg sok howto-t talalni a neten qt crosscompile-lal kapcsolatban
en a (nekem) legegyszerubb megoldast valasztottam: a virtualis xp-re felraktam a qt-t, es a virtualbox shared directory-knak koszonhetoen a projectem windowsra forditasa annyi, hogy a virtualis gepet felebresztem alvasbol, nyomok neki egy qmake/make kombot, es kesz az exe, virt.gep elaltat es ennyi
az egesz a forditason kivul kb. 10 mp

Kétségkívül ez a legegyszerűbb módja, én is így használom.
Linux alól így lehet fordítani.

Köszönöm mindenkinek a választ.