2010-05-24 5 views
5

Ich bin ziemlich neu in Qt, und ich benutze die neue Nokia Qt SDK Beta und ich arbeite daran, eine kleine Anwendung für mein Nokia N900 in meiner Freizeit zu entwickeln.
Glücklicherweise konnte ich alles richtig einrichten und auch meine App auf dem Gerät ausführen.Was ist der Zweck der Müll (Dateien), die Qt Creator automatisch generiert und wie kann ich sie zähmen?

Ich habe C++ in der Schule gelernt, also dachte ich, dass es nicht so schwierig sein wird.
Ich verwende Qt Creator als meine IDE, weil es nicht mit Visual Studio funktioniert.

Ich möchte auch meine App auf Symbian portieren, also habe ich den Emulator ein paar Mal ausgeführt, und ich kompiliere auch für Windows, um die schlimmsten Bugs zu debuggen. (Der Debugger funktioniert nicht richtig auf dem Gerät.)

Ich komme aus einem .NET-Hintergrund, also gibt es einige Dinge, die ich nicht verstehe.

Wenn ich den Build-Button drücken, Qt Creator erzeugt eine Reihe von Dateien zu meinem Projektverzeichnis:

  • moc_*.cpp Dateien - ich weiß nicht ihren Zweck. Kann mir das jemand sagen?
  • *.o Dateien - Ich gehe davon aus das sind der Objektcode
  • *.rss Dateien - ich weiß nicht ihren Zweck, aber sie haben definitiv nichts mit RSS zu tun
  • Makefile und Makefile.Debug - ich habe keine Ahnung,
  • AppName (ohne Erweiterung) - die ausführbare Datei für Maemo und AppName.sis - die ausführbare Datei für Symbian, denke ich?
  • AppName.loc - ich habe keine Ahnung,
  • AppName_installer.pkg und AppName_template.pkg - ich habe keine Ahnung,
  • qrc_Resources.cpp - ich denke, das ist für meine Qt Ressourcen ist

(wo AppName ist der Name der Anwendung in Frage)

Ich bemerkte, dass diese Dateien sicher gelöscht werden können, Qt Creator regeneriert sie einfach.
Das Problem ist, dass sie mein Quellverzeichnis verschmutzen. Vor allem, weil ich die Versionskontrolle verwende, und wenn sie neu generiert werden können, hat es keinen Sinn, sie auf SVN hochzuladen.

Könnte mir bitte jemand sagen, was der genaue Zweck dieser Dateien ist und wie kann ich Qt Creator bitten, sie in ein anderes Verzeichnis zu stellen?

EDIT:

Es scheint, dass ich mehr aus den Antworten dieser Frage gelernt, als ich dachte, ich würde. :)
Vielen Dank an alle, die mir geholfen haben. Ich gab jedem eine Aufwertung, weil ich aus jeder Antwort etwas Neues lernen konnte.

Eigentlich scheint das, was Rob empfohlen hat, die bequemste Lösung zu sein, aber ich habe Kottis Antwort akzeptiert, weil er mir die beste Erklärung dafür lieferte, wie Qt's Build-Mechanismus funktioniert.

Die Lösung:

Es scheint, dass weder die Maemo noch die Symbian-Toolchain Schatten als die noch baut unterstützt, so dass ich diese in meiner Projektdatei, die Situation zu lösen:

DESTDIR = ./NoSVN 
OBJECTS_DIR = ./NoSVN 
MOC_DIR = ./NoSVN 
RCC_DIR = ./NoSVN 
UI_HEADERS_DIR = ./NoSVN 
+0

Es kann einige Nachforschungen erfordern, aber Sie sollten in der Lage sein, einen Weg zu finden, diese Dateien anderswo zu machen. (Wir bauen Qt-Apps, verwenden QMake aber nicht, deshalb kann ich Ihnen dafür keine Angaben machen; ich weiß nur, dass die Tools die Dateien dorthin bringen, wo Sie sie haben wollen.) –

+0

@ dash-tom-bang - Ich bin neugierig , mit welchem ​​Tool kompilieren und bauen Sie, wenn nicht QMake? – Venemo

+0

Ein internes Tool, das von Jam abgeleitet wurde. –

Antwort

18

Nicht eine vollständige Antwort auf Ihre Frage, sondern nur ein Teil davon :) Es ist auch googlefähig. Wenn Sie in C++ entwickeln, sollten Sie wissen, was Makefile bedeutet. Ich denke auch, dass die Datei .loc im Allgemeinen eine Datei mit lokalisierten Zeichenfolgen/Inhalt ist.

alt text http://thelins.se/learnqt/wp-content/uploads/qt-buildsystem.png

die C++ Vergleich Build-System auf die Qt-Build-System, können Sie sehen, dass die C-System ++ zu bauen, (die grauen Kästen), werden unverändert gelassen. Wir bauen immer noch C++ Code hier. Wir fügen jedoch mehr Quellen und Header hinzu. Drei Code-Generatoren hier beteiligt sind:

Die Meta-Objekt-Compiler (moc in der Abbildung) - die Meta-Objekt-Compiler nehmen alle Klassen mit dem Q_OBJECT Makro starten und erzeugen eine moc _ * CPP C++ Quelldatei.. Diese Datei enthält Informationen über die zu moktierende Klasse wie Klassenname, Vererbungsbaum usw., aber auch die Implementierung der Signale. Das heißt, wenn Sie ein Signal aussenden, rufen Sie tatsächlich eine Funktion auf, die vom Moc erzeugt wird.

Der Benutzeroberflächencompiler (uic in der Abbildung) - Der Benutzeroberflächencompiler nimmt Designs von Designer und erstellt Headerdateien. Diese Header-Dateien werden dann wie gewohnt in Quelldateien eingefügt, so dass SetupUi aufgerufen werden kann, um ein Benutzeroberflächen-Design zu erstellen.

Der Qt-Ressource-Compiler (RCC in der Abbildung) - Der Ressource Compiler ist etwas, über das wir noch nicht gesprochen haben. Es ermöglicht das Einbetten von Bildern, Textdateien usw. in Ihre ausführbare Datei, aber immer noch als Dateizugriff. Wir werden uns das später ansehen, ich möchte es nur in dieses Bild aufnehmen, wo es hingehört.

Ich hoffe, diese Abbildung verdeutlicht, was Qt wirklich tut, um neue nette Schlüsselwörter zu C++ hinzuzufügen. Wenn Sie neugierig sind, können Sie einige der generierten Dateien lesen. Ändern Sie sie einfach nicht - sie werden jedes Mal neu erstellt, wenn Sie Ihre Anwendung erstellen.

Wenn Sie QtCreator verwenden, werden die MOC-Dateien in den Debug- und Release-Unterverzeichnissen Ihres Projektverzeichnisses generiert. Die UIC-Dateien sind im Stammverzeichnis des Projektverzeichnisses gespeichert. Die RCC-Dateien sind in der Regel langweilig, aber ich bin sicher, dass Sie sie irgendwo in Ihrem Projektverzeichnis Hierarchy finden können.


Bearbeiten: Sie müssen diese Dateien nicht in Ihrem SVN enthalten. Das ist ziemlich der gleiche Mist wie commit .ncb, .pdb und andere temporäre Dateien. Jedes Mal, wenn Sie etwas in Ihrer Qt-Anwendung ändern, werden diese temporären Dateien als Update für Ihre Änderungen neu generiert, sodass es keinen Sinn macht, sie an SVN zu übergeben.

+0

@Kotti - Vielen Dank! Sie sind jedoch alle im Root-Verzeichnis meines Projekts abgelegt. Ich würde mich freuen wenn ich es in ein 'debug' oder' bin' Verzeichnis bringen könnte. – Venemo

+0

Als ich mich erinnere, wie ich Qt Sachen gemacht habe (ich benutzte Visual Studio + Qt), gab es ein Einstellungsfenster, in dem Sie spezifizieren konnten, wo man diese erzeugten Akten setzt. In meinem Fall wurde es auf 'GeneratedFiles' gesetzt und ich habe nicht einmal darüber nachgedacht. Ich bin mir ziemlich sicher, dass es in Qt Creator denselben Schalter geben sollte. Warum hast du auch gesagt, Qt funktioniert nicht mit VS? –

+0

@Kotti - Ich sage, weil es nicht funktioniert. Es lässt mich kein neues Projekt erstellen. Möglicherweise ist es durch einige andere VS-Erweiterung durcheinander gebracht. Aber das macht nichts, denn ich glaube nicht, dass es möglich ist, damit mobile Geräte zu delelopieren. (Zumindest konnte ich keine Ressourcen darüber finden.) – Venemo

1

Versuchen Sie nicht, die Dateien in einem anderen Verzeichnis zu speichern. Sagen Sie eher Subversion, um sie zu ignorieren, wie zum Beispiel unter http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.ignore.html erläutert.

Die meisten Quellcodeverwaltungssysteme haben eine gute Unterstützung für das Ignorieren generierter Dateien, da dies von fast jedem einzelnen Softwareprojekt ein Problem ist.

5

Sie können qmake (und damit QtCreator) erzählen, indem Sie die folgende in der .pro-Datei für das Projekt der generierten Dateien an anderer Stelle zu setzen

UI_DIR = .ui 
MOC_DIR = .moc 
OBJECTS_DIR = .obj 

Dies würde alle ui-Dateien im Verzeichnis .ui setzen, moc-Dateien im .moc-Director und alle .o-Dateien im Verzeichnis .obj. (Natürlich können Sie diese ändern, wie Sie möchten)

Die entsprechende Hilfe für qmake ist: http://doc.qt.io/archives/4.6/qmake-variable-reference.html#moc-dir

2

Wenn Sie Schatten-Builds (standardmäßig aktiviert im Qt Creator 2.0 beta) dann alle diese temporären Dateien erstellt werden in einem separaten Ordner. Zum Beispiel:

\MyProjects\ProjectFoo 
\MyProjects\ProjectFoo-build 

Sehr nützlich IMHO.

+0

Danke, ich werde es überprüfen. Es wird komisch sein, dass ich 3 verschiedene Versionen von Qt Creator habe. : P – Venemo

+0

Ich entdeckte, dass Qt Creator v.1.3.83, die standardmäßig in Nokia Qt SDK ist, das gleiche wie 2.0 Beta 1 ist. Dennoch werden diese Dateien im Quellordner erstellt. Könnten Sie mir bitte sagen, wo Sie die Einstellung aktivieren können, über die Sie sprechen? – Venemo

+0

Wählen Sie die Ansicht Projekte und dann die Seite Erstellen. Die Shadow-Build-Einstellungen sollten darin enthalten sein - möglicherweise ist sie aktiviert, aber der Speicherort des Ordners ist mit dem Projekt identisch. – Rob