Seite 1 von 1

Im .pro File weiteres .pro File aufrufen

Verfasst: 3. August 2010 14:20
von Christoph_BS
Hallo,

ich nutze in meinem QT-Projekt die Klasse qextserialport. Die qextserialport steuert die serielle Schnittstelle an, diese habe ich im Internet gefunden. Ich benutze die lib-Datei dieser Klasse.
Meine Frage ist nun, ob es möglich ist, in meinem Hauptprojekt, indem die qextserialport benutzt wird in der .pro Datei so die Einstellungen zu machen, dass die .pro-Datei der qextserialport aufgerufen wird. Damit würde die .lib der qextserialport automatisch erzeugt werden. Bisher muss ich immer erst die .pro der qextserialport ausführen und dann die .pro meines Hauptprojektes.
Viele Dank

Verfasst: 3. August 2010 21:41
von padreigh
du suchst: google "qt template=subdirs" :)

damit legst du in dem .pro mit template = subdirs die unterverzeichnisse fest in denen weitergesucht werden soll

in jedem unterverzeichnis kommt eine eigene .pro die das kompilieren der gui bzw lib (template=app/lib) regelt

Verfasst: 4. August 2010 12:22
von Christoph_BS
Vielen Dank erstmal für den Hinweis mit den SubDirs, das scheint die richtige Richtung zu sein.
Ich habe bisher in dem Makefile meines Hauptprogrammes folgendes am Anfang ergänzt (Da erst die lib von QExtSerialport erstellt werden soll), bevor das Hauptprojekt erstellt wird.

Code: Alles auswählen

TEMPLATE = subdirs
SUBDIRS = ../QExtSerial

CONFIG += ordered 
SUBDIRS += build 
Das .pro File von QExtSerialport existiert ja bereits, dort ist Template auch auf .lib gestellt.
Es passiert jedoch nichts, wenn ich das .pro File vom Hauptprogramm ausführe. Es kommt jedoch auch keine Fehlermeldung. ICh bin mir uach nicht sicher wofür der Parameter ordered steht.

Verfasst: 4. August 2010 15:17
von solarix
Ich bin mir nicht sicher wie du das anwendest, aber wichtig ist einfach, dass du eine saubere Struktur deiner Profiles machst.

z.B.

Code: Alles auswählen

 ./QExtSerial 
           /QExtSerial.pro
 ./MyUeberProgram
          /MyUeberProgram.pro

 ./ProjectXy.pro
Und in der ProjectXY.pro nur noch die Subdirs:

Code: Alles auswählen

  TEMPLATE = subdirs
  CONFIG  += ordered

  SUBDIRS += QExtSerial
  SUBDIRS += MyUeberProgram
"ordered" bedeutet, dass die Projekte abhängig voneinander sind und daher in genau dieser Reihenfolge erstellt werden müssen (auf keinen Fall parallel..)

hth..

Verfasst: 4. August 2010 15:55
von Christoph_BS
Achso vielen Dank, ich muss also ein drittes .pro File erstellen.
Mit welchem Kommando rufe ich das dann auf ?
bisher habe ich immer mit
qmake -t vcapp oder
qmake -t vclib
erstellt. Aber weder damit noch mit qmake oder qmake -t funktioniert es.

(hoffentlich) Funktionierendes Minimalbeispiel

Verfasst: 4. August 2010 15:56
von padreigh
Schau mal ins Zip, falls du eine link-fehler bekommst, musst du die Library libhellolib*.* irgendwo in den Pfad packen ... irgendwie scheint mein LIBS += -L/pfad/ -lhellolib nicht zu funzen ...

Das ganze Baut ein Widget mit einem Label ("Hello") und einem Button sowie die lib (mit einer statischen Funktion).

Der Button added die ausgabe der statischen lib-fkt. an den Text des Labels ... rate mal was bei rauskommt ;)

Die vielen obj/moc directories liegen daran das ichs gerne aufgeräumt habe ;)

Struktur und Inhalt des Zips:

Code: Alles auswählen

subDirs
|-- bin
|-- eins
|   |-- eins.pro
|   |-- hello.cpp
|   |-- hello.h
|   |-- main.cpp
|   |-- Makefile
|   |-- moc
|   `-- obj
|-- lib
|-- Makefile
|-- subDirs.pro
`-- zwei
    |-- hellolib.cpp
    |-- hellolib.h
    |-- Makefile
    |-- moc
    |-- obj
    `-- zwei.pro

Verfasst: 5. August 2010 14:28
von Christoph_BS
ja vielen Dank, so ähnlcih ist mein Programm auch aufgebaut.
Mit welchem Aufruf (Parameter) starte ich den die subDirs.pro ?
qmake -t vcapp ??

Verfasst: 5. August 2010 18:28
von padreigh
Schau dir mal die qmake Hilfe an ... dann wüsstest du was -t macht ...

Code: Alles auswählen

Usage: qmake [mode] [options] [files]

QMake has two modes, one mode for generating project files based on
some heuristics, and the other for generating makefiles. Normally you
<SNIPPPPPP>
  -t templ       Overrides TEMPLATE as templ
<SNAPPPPPP>
Also überschreibst du das subdirs template ... frag mal die Windowsnutzer, die haben vielleicht Ahnung mit dem vsirgendwas template ;) .. im Zweifelsfalle brauchst du das -t garnicht und gibst einfach in den .pro`s der subdirs das vs.... template an (da gibts 2, eins für apps, eins für libs ...)