Seite 1 von 1
Mehrere Projekte zusammenfassen (Qt Creator)
Verfasst: 22. Juni 2010 09:49
von plip
Hallo,
ich habe einen Ordner, in dem sich mehrere Projekt-Unterordner mit entsprechenden pro-Files befinden. Jetzt frage ich mich ob es möglich ist, eine übergeordnetes Projekt zu erzeugen und so im Qt-Creator mit eier Anweisung automatisch alle Projekte neu zu builden.
Wer kann mir sagen ob und wie das geht?
Gruß Philip
Re: Mehrere Projekte zusammenfassen (Qt Creator)
Verfasst: 22. Juni 2010 13:39
von MichaelS
plip hat geschrieben:Hallo,
Wer kann mir sagen ob und wie das geht?
Gruß Philip
Moin,
Das geht ganz einfach, in dem Du im übergeordneten Projektordner eine pro-Datei mit folgendem Inhalt anlegst:
Code: Alles auswählen
TEMPLATE = subdirs
SUBDIRS =subprojekt1 \
subprojekt2 \
...
und dieses Pro-File im Creator öffnest.
Gruß Michael
Verfasst: 22. Juni 2010 13:44
von t_b
Ganz so einfach ist es nicht, es sei denn, die Unterprojekte sind unabhängig von einander, dann hättest du Recht. Ansonsten habe ich gerade genau das gleiche Problem, siehe
Projektstruktur
Ich versuche jetzt schon seit geraumer Zeit ein solches Grundgerüst zu erstellen, jedoch bisher ohne Erfolg.
Verfasst: 22. Juni 2010 14:10
von plip
Funktioniert leider irgendwie nicht, ich bekomme folgende Meldung
Reading c:/.../xyz.pro
Beendet mit Rückgabewert 3.
Fehler beim Erstellen des Projekts plugins
Beim Ausführen des Build-Schritts 'QMake'
Verfasst: 22. Juni 2010 14:40
von MichaelS
t_b hat geschrieben:Ganz so einfach ist es nicht, es sei denn, die Unterprojekte sind unabhängig von einander, dann hättest du Recht.
Auch bei Abhängigkeiten zwischen den Unterprojekten klappt das. Unter Umständen muss man dazu aber die Reihenfolge vorgeben, in der die Unterprojekte kompiliert werden sollen. Das erreicht man mit der Option
im Pro-File des Hauptprojektes und der korrekten Reihenfolge der SUBDIRS Optionen.
Ich verwalte auf diese Weise 4 Projekte. Eines davon hat 13 Unterprojekte.
Gruß Michael
Verfasst: 22. Juni 2010 14:41
von MichaelS
plip hat geschrieben:Funktioniert leider irgendwie nicht, ich bekomme folgende Meldung
Reading c:/.../xyz.pro
Beendet mit Rückgabewert 3.
Fehler beim Erstellen des Projekts plugins
Beim Ausführen des Build-Schritts 'QMake'
Wie sieht denn die Datei xyz.pro aus?
Verfasst: 22. Juni 2010 19:04
von t_b
Dann würde ich gerne Wissen, wie ich das Problem der "doppelten" main.cpp löse? Denn wenn ich in 2 Projekten Dateien mit gleichen Namen habe, habe ich ein Problem. Deswegen habe ich die Dateien, die in anderen Projekten gebraucht werden in pri Dateien ausgelagert und in der jeweiligen pro Datei mittels
include(Projekt)
eingebunden. Das Problem, welches ich bisher aber noch habe, ist diese pri Dateien noch nicht im Hauptprojekt einbinden kann.
Verfasst: 23. Juni 2010 07:58
von MichaelS
t_b hat geschrieben:Dann würde ich gerne Wissen, wie ich das Problem der "doppelten" main.cpp löse? Denn wenn ich in 2 Projekten Dateien mit gleichen Namen habe, habe ich ein Problem. Deswegen habe ich die Dateien, die in anderen Projekten gebraucht werden in pri Dateien ausgelagert und in der jeweiligen pro Datei mittels
include(Projekt)
eingebunden. Das Problem, welches ich bisher aber noch habe, ist diese pri Dateien noch nicht im Hauptprojekt einbinden kann.
Wieso hast Du ein Problem? Da jedes Unterprojekt in einem eigenen Verzeichnis liegt, gibt es keine doppelten Dateien. Die kommen sich doch gar nicht in die Quere.
Verfasst: 24. Juni 2010 12:00
von t_b
Das gilt für unabhängige Projekte. Für Projekte, die auf Dateien anderer Unterprojekte Zugriff brauchen besteht jedoch ein Prolem.
Beispiel:
Code: Alles auswählen
BasisProjekt
BasisProjekt.pro
UnterProjekt1
Unterprojekt1.pro
sharedfile.h
sharedfile.cpp
main.cpp
Unterprojekt2
Unterprojekt2.pro
somefile.cpp
somefile.h
main.cpp
Sei nun BasisProjekt.pro:
Code: Alles auswählen
CONFIG+=ordered
TEMPLATE=subdirs
SUBDIRS+=Unterprojekt1
SUBDIRS+=Unterprojekt2
und Unterprojekt1.pro
Code: Alles auswählen
TEMPLATE=app
HEADERS+=sharedfile.h
SOURCES+=sharedfile.cpp \
main.cpp
FORMS+=sharedfile.ui
und Unterprojekt2.pro
Code: Alles auswählen
TEMPLATE=app
include($$PWD/../Unterprojekt1.pro)
HEADERS+=somefile.h
SOURCES+=somfile.cpp \
main.cpp
Mit dem include inkludiere ich auch automatisch die main.cpp des Unterprojekt1. Um dies zu interbinden, habe ich folgendes versucht:
Unterprojekt1.pro
Code: Alles auswählen
TEMPLATE=app
include(Unterprojekt1.pri)
SOURCES+=main.cpp
und Unterprojekt1.pri
Code: Alles auswählen
HEADERS+=sharedfile.h
SOURCES+=sharedfile.cpp
FORMS+=sharedfile.ui
sowie Unterprojekt2.pro
Code: Alles auswählen
TEMPLATE=app
include($$PWD/../Unterprojekt1.pri)
HEADERS+=somefile.h
SOURCES+=somfile.cpp \
main.cpp
Wenn ich nun Unterprojekt1 oder Unterprojekt2 versuche zu kompilieren bekomme ich nun folgendes Problem:
Code: Alles auswählen
Running build steps for project BasisProjekt...
Configuration unchanged, skipping qmake step.
Starting: "C:/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `D:/Projekte/BasisProjekt-build'
cd Unterprojekt1\ && C:/mingw/bin/mingw32-make -f Makefile
mingw32-make[1]: Entering directory `D:/Projekte/BasisProjekt-build/Unterprojekt1'
C:/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[2]: Entering directory `D:/Projekte/BasisProjekt-build/Unterprojekt1'
mingw32-make[2]: Nothing to be done for `first'.
mingw32-make[2]: Leaving directory `D:/Projekte/BasisProjekt-build/Unterprojekt1'
mingw32-make[1]: Leaving directory `D:/Projekte/BasisProjekt-build/Unterprojekt1'
cd BasisProjekt\ && C:/mingw/bin/mingw32-make -f Makefile
mingw32-make[1]: Entering directory `D:/Projekte/BasisProjekt-build/Unterprojekt2'
C:/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[2]: Entering directory `D:/Projekte/BasisProjekt-build/Unterprojekt2'
mingw32-make[2]: Leaving directory `D:/Projekte/BasisProjekt-build/Unterprojekt2'
mingw32-make[1]: Leaving directory `D:/Projekte/BasisProjekt-build/Unterprojekt2'
mingw32-make: Leaving directory `D:/Projekte/BasisProjekt-build'
mingw32-make[2]: *** No rule to make target `Unterprojekt1/sharedfile.ui', needed by `ui_sharedfile.h'. Stop.
mingw32-make[1]: *** [debug] Error 2
mingw32-make: *** [sub-BasisProjekt-make_default-ordered] Error 2
The process "C:/mingw/bin/mingw32-make.exe" exited with code 2.
Error while building project BasisProjekt (target: Desktop)
When executing build step 'Make'
Ich hoffe dieses Beispiel ist verständlich.
Verfasst: 24. Juni 2010 15:35
von MichaelS
t_b hat geschrieben:Das gilt für unabhängige Projekte. Für Projekte, die auf Dateien anderer Unterprojekte Zugriff brauchen besteht jedoch ein Prolem.
TEMPLATE=app
include($$PWD/../Unterprojekt1.pro)
HEADERS+=somefile.h
SOURCES+=somfile.cpp \
main.cpp
Warum bindest Du das ganze Unterprojekt1 ein, statt nur die Dateien, die Du auch wirklich in Unterprojekt2 benötigst?
Code: Alles auswählen
TEMPLATE=app
HEADERS+=somefile.h \
../Unterprojekt1/sharedfile.h
SOURCES+=somfile.cpp \
../Unterprojekt1/sharedfile.cpp \
main.cpp
Verfasst: 3. Juli 2010 02:53
von t_b
Weil ich so in Unterprojekt 1 neue Dateien hinzufügen kann ohne diese Abhängigkeiten dann auch in Unterprojekt 2 erst wieder hinzufügen zu müssen. Wenn es nur 1-2 Dateien wären, dann ist das noch in Ordnung, wenn es dann aber 10 (oder mehr) werden und du dann bei jedem neuen (Unter-)Projekt jeweils die 10 (oder mehr) Dateien angeben musst, dann ist es doch sinnvoller solch eine pri zu nutzen. Dann muss ich nämlich nur diese angeben.