Mehrere Projekte zusammenfassen (Qt Creator)
Mehrere Projekte zusammenfassen (Qt Creator)
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
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)
Moin,plip hat geschrieben:Hallo,
Wer kann mir sagen ob und wie das geht?
Gruß Philip
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 \
...
Gruß Michael
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.
Ich versuche jetzt schon seit geraumer Zeit ein solches Grundgerüst zu erstellen, jedoch bisher ohne Erfolg.
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 Optiont_b hat geschrieben:Ganz so einfach ist es nicht, es sei denn, die Unterprojekte sind unabhängig von einander, dann hättest du Recht.
Code: Alles auswählen
CONFIG+=orderedIch verwalte auf diese Weise 4 Projekte. Eines davon hat 13 Unterprojekte.
Gruß Michael
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
eingebunden. Das Problem, welches ich bisher aber noch habe, ist diese pri Dateien noch nicht im Hauptprojekt einbinden kann.include(Projekt)
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.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 mittelseingebunden. Das Problem, welches ich bisher aber noch habe, ist diese pri Dateien noch nicht im Hauptprojekt einbinden kann.include(Projekt)
Das gilt für unabhängige Projekte. Für Projekte, die auf Dateien anderer Unterprojekte Zugriff brauchen besteht jedoch ein Prolem.
Beispiel:
Sei nun BasisProjekt.pro:
und Unterprojekt1.pro
und Unterprojekt2.pro
Mit dem include inkludiere ich auch automatisch die main.cpp des Unterprojekt1. Um dies zu interbinden, habe ich folgendes versucht:
Unterprojekt1.pro
und Unterprojekt1.pri
sowie Unterprojekt2.pro
Wenn ich nun Unterprojekt1 oder Unterprojekt2 versuche zu kompilieren bekomme ich nun folgendes Problem:
Ich hoffe dieses Beispiel ist verständlich.
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.cppCode: Alles auswählen
CONFIG+=ordered
TEMPLATE=subdirs
SUBDIRS+=Unterprojekt1
SUBDIRS+=Unterprojekt2Code: Alles auswählen
TEMPLATE=app
HEADERS+=sharedfile.h
SOURCES+=sharedfile.cpp \
main.cpp
FORMS+=sharedfile.uiCode: Alles auswählen
TEMPLATE=app
include($$PWD/../Unterprojekt1.pro)
HEADERS+=somefile.h
SOURCES+=somfile.cpp \
main.cppMit 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.cppCode: Alles auswählen
HEADERS+=sharedfile.h
SOURCES+=sharedfile.cpp
FORMS+=sharedfile.uiCode: Alles auswählen
TEMPLATE=app
include($$PWD/../Unterprojekt1.pri)
HEADERS+=somefile.h
SOURCES+=somfile.cpp \
main.cppCode: 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'Warum bindest Du das ganze Unterprojekt1 ein, statt nur die Dateien, die Du auch wirklich in Unterprojekt2 benötigst?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
Code: Alles auswählen
TEMPLATE=app
HEADERS+=somefile.h \
../Unterprojekt1/sharedfile.h
SOURCES+=somfile.cpp \
../Unterprojekt1/sharedfile.cpp \
main.cpp
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.