Mehrere Projekte zusammenfassen (Qt Creator)

Verschiedenes zu Qt
Antworten
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Mehrere Projekte zusammenfassen (Qt Creator)

Beitrag 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
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: Mehrere Projekte zusammenfassen (Qt Creator)

Beitrag 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
t_b
Beiträge: 41
Registriert: 27. Februar 2010 14:12

Beitrag 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.
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Beitrag 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'
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag 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

Code: Alles auswählen

CONFIG+=ordered
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
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag 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?
t_b
Beiträge: 41
Registriert: 27. Februar 2010 14:12

Beitrag 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.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag 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.
t_b
Beiträge: 41
Registriert: 27. Februar 2010 14:12

Beitrag 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.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag 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
t_b
Beiträge: 41
Registriert: 27. Februar 2010 14:12

Beitrag 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.
Antworten