Dlaczego Qt używa własnego narzędzia make, qmake?

Zacząłem używać Qt i zauważyłem, że używa on własnego narzędzia make, qmake .

  • Dlaczego Qt używa własnego narzędzia make?
  • czy jest coś specjalnego, co uniemożliwia użycie standardowego narzędzia make?
  • czy qmake wywołuje kompilator GCC C++?
Author: Trojan, 2009-09-02

5 answers

Qt używa qmake do przezroczystej obsługi różnych dodatków Qt, w tym "moc, kompilator meta-obiektów" (który dostarcza sygnały i sloty), "UIC, kompilator ui" (który tworzy pliki nagłówkowe z .ui designer files), "RCC, the resource compiler" (który kompiluje zasoby).

Nic nie powstrzyma cię przed używaniem dowolnego systemu budowania. to jednak dużo więcej pracy. Na przykład, musisz uruchomić " moc " nad każdym plikiem nagłówkowym, który zawiera klasę, która ma Sygnały lub sloty. Ogólnie to nie jest zalecane, szczególnie dla kogoś, kto dopiero zaczyna używać Qt.

QMake nie wywołuje bezpośrednio g++/gcc. Zamiast tego qmake tworzy natywne pliki make na bieżącej platformie. Pod Linuksem tworzy standardowe pliki GNU make, pod windows może generować pliki Visual studio make, pod Mac OS X może generować pliki projektu Xcode. Następnie wywołujesz swój natywny system budowania (GNU make, MS NMake, xcodebuild lub cokolwiek innego), który wywoła Twój natywny kompilator (g++ / gcc lub nieważne).

 55
Author: Thomi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-03 07:23:04

Moim zdaniem qmake jest fajne do prostych projektów( można po prostu qmake-project; qmake; make), ale straszne i za mało udokumentowane do dużych projektów. Zwłaszcza Konfiguracja funkcji qmake to żart.

Najlepsze systemy budowania jakie znam to CMake i Waf (oparte na Pythonie). W moich własnych projektach Qt używam CMake do tego zadania. Tak jak KDE-guys:)

 8
Author: Game Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-12 15:10:32

Qmake jest zaprojektowany tak, aby był wieloplatformowy i elastyczny. Może być kompatybilny z Microsoft Visual Studio i Xcode.

Znajdziesz to wszystko w instrukcji qmake .

Qmake generuje plik Makefile na podstawie informacje w pliku projektu. Pliki projektu są tworzone przez dewelopera i są zwykle proste, ale bardziej wyrafinowane pliki projektu mogą być tworzone dla złożonych projektów. qmake zawiera dodatkowe funkcje do wsparcie rozwoju z Qt, automatyczne dołączanie reguł budowania dla moc i uic. qmake może również generowanie projektów dla Microsoft Visual studio bez potrzeby dewelopera aby zmienić plik projektu.

 5
Author: Brian Gianforcaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-02 15:58:22

Aby wspierać swój system sygnału/slotu, Qt opiera się na specjalnym preprocesorze i kompilatorze, który generuje obiekty pośrednie, które wykonują większość przetwarzania. Określają to jako kompilator meta-obiektów lub MOC.

Zobacz http://doc.trolltech.com/4.5/moc.html Po szczegóły.

MOC (wraz z kilkoma innymi narzędziami pośrednimi) działa w połączeniu z qmake; który tworzy pliki Makefile w natywnym formacie (VC++, g++, itp.), które budują pliki pośrednie generowane przez MOC, jak również wszystkie pliki źródłowe do ostatecznego pliku wykonywalnego.

 5
Author: Ron Warholic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-26 01:17:40

W kolejności

A) ponieważ robi wiele za kulisami dla Ciebie

B) tak, Patrz a)

C) tak, wywołuje g++ (ale może obsługiwać inne Kompilatory, jeśli je posiadasz)

 3
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-02 15:55:06