Projekte mit Qt und Dev-cpp(MinGW) kompilieren
-
Vielen vielen Dank für diese Anleitung!
Ich habe ungelogen Tage damit verbracht und herumprobiert, dies zum Laufen zu bringen - doch wenn man nicht weiß, was wichtig ist und was nicht, kann man sich schnell mit unwichtigen Sachen herumschlagen, die letztendlich doch nicht zum Erfolg führen.
Mit dieser Anleitung habe ich's innerhalb von wenigen Minuten zum Laufen gebracht - sehr schön!
-
Mir erging es wie dem Vorredner, ich habe immer wieder versucht, es zu laufen zu bringen, aber ohne Erfolg, abgesehen von dem heutigen Tag mit dieser Anleitung. Eine Frage hätte ich aber doch noch:
Es ist im Dev-C++ äußerst mühsam, im Projekt->Projekt Optionen->Verzeichnis->Include-Verzeichnis alle QT Pfade zu korrigieren.a) ist es überhaupt notwendig, wenn bereits mit qmake ein makefile erstellt wurde
b) kann das der Dev nicht allein, oder wenigstens als Standard speichernIch bin leider überfordert mit diesen Fragen...
Gruß
-
Hi,
die Zeit, die Du mit dem Eintragen der Compiler-Einstellungen verbringst ist doch nicht zu vergleichen mit der Zeit, die Du vorher mit den vergeblichen Versuchen verbracht hast. Die Einstellungen musst Du nur ein einziges Mal zu Beginn des Projekts machen, dann nicht mehr ... wenn's hoch kommt verbringt ein schneller Tipper/Klicker vielleicht fünf bis zehn Minuten damit ...
-
Kann man doch bestimmt ein Tools für schreiben das das automatisiert!
-
-. schrieb:
MOT MOC
oh, dass das keinem aufgefallen ist
bitte!! schrieb:
Kann man doch bestimmt ein Tools für schreiben das das automatisiert!
Ja, aber das war ja nicht Ziel des Artikels. Aber wenn du zeit und Lust hast, kannst ja loslegen.
-
Hallo,
erstmal vielen Dank an Mosta für die gute Anleitung.
Schritt eins und zwei funktionieren bei mir auch einwandfrei.
Solange ich kein Q_OBJECT mit einbinde lassen sich die Programme auch ohne Schritt drei problemlos compilieren.Schritt drei habe ich nichtdestotrotz natürlich auch durchgeführt!
Ich hab hier ein kleines Programm und werde nicht richtig schlau aus den Fehlermeldungen!
main.cpp
#include <QApplication> #include <QFont> #include <QMainWindow> #include "my_mainwindow.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); My_MainWindow *window = new My_MainWindow; window->show(); return app.exec(); }
my_mainwindow.cpp
#ifndef MY_MAINWINDOW_H #define MY_MAINWINDOW_H #include <QMainWindow> #include <QWidget> class My_MainWindow: public QMainWindow { Q_OBJECT public: My_MainWindow (QWidget *parent = 0); private: }; My_MainWindow::My_MainWindow(QWidget *parent): QMainWindow(parent) { } #endif // MY_MAINWINDOW_H
Lässt sich problemlos ohne Q_OBJECT compilieren aber leider nicht mit!
Fehlermeldung
releasemain.o(.text+0x2a):main.cpp: undefined reference to
vtable for My_MainWindow' releasemain.o(.text+0x31):main.cpp: undefined reference to
vtable for My_MainWindow'
releasemain.o(.text+0x6a):main.cpp: undefined reference tovtable for My_MainWindow' releasemain.o(.text+0x71):main.cpp: undefined reference to
vtable for My_MainWindow'
collect2: ld returned 1 exit statusmake.exe: *** [release\test2.exe] Error 1
Ausführung beendet
Würde mich freuen, wenn ihr mir bei der Poblemlösung helfen könntet.
Gruss
Sebastian
-
Hallo Sebastian12,
hast du mit qmake auch einen makefile erstellt und den dann in deinem Projekt als custom makefile eingebunden.mit qmake-project erstellst du ne .pro Datei und mit qmake danach die makefiles. Die du dann unter Project Options einstellst.
gruß mosta
-
an DevC++ am mich die Einstellungen der Libs etc. auch immer zum
Haare ausrupfen getrieben. Entlich mal was wo auf den Punkt gebracht wird worauf man achten muss.
-
Also bei mir läuft's nicht.
Was mir zum Beispiel nicht klar ist: Es gibt ja sowohl den Dev-C++ als auch das Qt an sich entweder zusammen mit dem MinGW, oder eben ohne. Nimmt man jetzt also den Dev-C++ mit MinGW und dafür Qt ohne, oder aber umgekehrt? Weil sonst hätte man ja den MinGW zweimal, was sicher nicht sinnvoll ist?
Wenn man den Dev-C++ aber ohne MinGW holt, muss man den auch erstmal in Dev-C++ einbinden, und das ist meiner Meinung nach in dieser Anleitung hier nicht mit drin.Ich wünschte, es gäbe offizielle Anleitungen von Trolltech, aber das machen die leider für die OpenSource-Version nicht. :-(((
-
Also die einfachste Methode ist es den Dev-Cpp mit MinGW zu installieren und QT ohne MinGW. Dann musst du nur während der installation von QT den Ordner angeben, wo Dec-Cpp den MinGW Compiler plaziert hat.
-
Hallo,
erstmal vielen Dank an mosta die Anleitung ist Spitze.
Jetzt hab ich aber noch eine Frage zur Codevervollständigung. Diese zeigt mit nur meine selbst geschriebenen Funktionen an und nicht die schon in Qt enthaltenen. Gibt es da einen Trick??Bin für jeden Tipp dankbar.
Gruß
mlc
-
meinst du für methoden? den soweit mir bekannt funktioniert das auch mit QT Klassen(komplett ohne trick). Aber die Code completion funktion läuft eh nicht richtig unter Dev-Cpp. Da solltest du aber mal bei bloodshed nachhacken.
-
Hallo,
weil es wirklich sehr lästig ist, für jedes Projekt die Pfade neu anzupassen, habe ich einen Installer (in Perl) geschrieben, der einen das alles abnimmt - man muss nur den Pfad zum QT Verzeichniss angeben und der Installer erledigt den Rest (man kann nach der Ausführung des Installers sofort anfangen ;-)). Hier ist der Code - viel Spaß
#!/usr/bin/perl # # me = # use strict; use Cwd; my @qt4libs = (); my @qt4inc = (); my $qtDir = (); my $qt4libs_ = ""; my $qt4inc_ = ""; my $devcpplib = ""; print "QT4.0 for Dev-Cpp Wizard\n\n"; # getting full path to qt dir do { print "Full QT path: "; chomp($qtDir = <STDIN>); print "--> invalid\n" unless -d $qtDir; } until(-d $qtDir); $qtDir =~ s/(\\|\/)$//; # get libs unless(-d "${qtDir}\\lib") { print stderr ("Couldnt find '${qtDir}\\lib'\n"); exit 1; } push(@qt4libs, $_) foreach(glob "${qtDir}\\lib\\*.a"); # get dirs unless(-d "${qtDir}\\include") { print stderr ("Couldnt find '${qtDir}\\include'\n"); exit 1; } opendir(__dh__, "${qtDir}\\include\\") || die $!; @qt4inc = map { "${qtDir}\\include\\$_" } (grep { !/^\.{1,2}$/ && -d "${qtDir}\\include\\$_" } readdir __dh__); push(@qt4inc, "${qtDir}\\include"); closedir __dh__; # try to write config unless(-d "Templates") { print stderr ("Couldnt find ./Templates"); exit 1; } # join @qt4libs & @qt4inc & setting $devcpplib $qt4libs_ = join "\_@\@_", @qt4libs; $qt4inc_ = join ";", @qt4inc; $devcpplib = cwd . "/lib"; # writing config chdir "Templates"; open(__fh1__, ">QT4 Application.template") || die $!; open(__fh2__, ">QT4_Application_main.cpp.txt") || die $!; print __fh1__ <<EOF; [Template] ver=1 Name=QT 4.0 Application IconIndex=0 Description=A basic template for QT 4.0 applications Catagory=Basic [Unit0] CName= CppName=main.cpp C= Cpp=QT4_Application_main.cpp.txt [Project] IsCpp=1 NoConsole=1 IsDll=0 UnitCount=1 Type=0 Name=QtApp Linker=$qt4libs_ Includes=$qt4inc_ Libs="$devcpplib" EOF ; print __fh2__ <<EOF #include <QApplication> #include <QFont> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton quit("Servus Welt!"); quit.resize(200, 30); quit.setFont(QFont("Arial", 18, QFont::Bold)); QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); quit.show(); return app.exec(); } EOF ; print "... done :-)\n";
-
Jens G. schrieb:
Hallo,
weil es wirklich sehr lästig ist, für jedes Projekt die Pfade neu anzupassen, habe ich einen Installer (in Perl) geschrieben, der einen das alles abnimmt - man muss nur den Pfad zum QT Verzeichniss angeben und der Installer erledigt den Rest (man kann nach der Ausführung des Installers sofort anfangen ;-)). Hier ist der Code - viel Spaß
P.S.: Das Script muss im Programmverzeichnis von Dev-Cpp ausgeführt werden
-
Hi,
hat bei mir prima geklappt.
Für neue Projekte kopiere ich die entsprechenden Einträge auf der Projektdatei.
Das spart Arbeit.Danke fuer diesen tollen Artikel. Ist sonst echt eine Kopfnuss.
Gruss
-
Hallo,
ich habe Probleme beim Ende des 2.Schrittes. Ich komme bis zu der Anweisung: "Dann klicken Sie auf "OK" und anschließend sollten Sie noch mal versuchen, das Programm zu kompilieren. Wenn es immer noch nicht funktioniert, sollten Sie erst einmal überprüfen, ob Sie irgendetwas übersprungen haben, oder im Forum posten." Das nochmalige Compilieren funktioniert nicht, obwohl ich die Verzeichnisse alle eingebunden habe.
Würde mich sehr freuen, falls mir da jemand weiterhelfen könnte.
-
könntest du vlt. noch sagen was nicht klappt und was für fehlermeldungen kommen?
-
Eine Fehlermeldung ist z.B: "QApplication:No such file or directory"
Also die gleiche Fehlermeldung wie vor dem Ausführen der ganzen Schritte.Danke für die Antwort
-
hast du auch deine ricntigen Pfade von deinem System angegeben? wo hast du den QT inszalliert(Pfad)
-
Also ich habe den Qt in C:\Qt\4.2.2 installiert.
Der Wert der Systemvariable Path endet mit Wbem, dazu habe ich
\C:\Qt\4.2.2\bin angefügt, richtig?
Beim Ausführen des Kommandos make bekomme ich folgende Fehlermeldung:
"Der Befehl "make" ist entweder falsch geschrieben oder
konnte nicht gefunden werden."
Woran kann das liegen, denn die Befehle qmake -project und qmake werden reibungslos ausgeführt?