qmake: debug & release

Verschiedenes zu Qt
Antworten
benibela
Beiträge: 17
Registriert: 23. Januar 2009 21:22

qmake: debug & release

Beitrag von benibela »

Hallo,
ich habe drei .pro-Dateien, ein subdir-Template, eine für eine statisch gelinkte dll und eine für das eigentlich Programm.
Jetzt möchte ich sie so einrichten, dass "make" automatisch den release-Build erzeugt, während "make debug" einen debug-Build erzeugt. Allerdings soll die erzeugte Datei je nach Build einen unterschiedlichen Namen erhalten.
Nur welche Variablen müssen dafür gesetzt werden?

Wenn ich CONFIG+=debug_and_release, schreibe, kann ich mittels CONFIG(debug, debug|release) zwischen debug/release-Build unterscheiden, und jeweils den TARGET-Dateinamen angeben.
Nur dummerweise erzeugt dann make immer den debug-Build. Mit einem zusätzlichen CONFIG+=release lässt sich das zwar verhindern, nur wird dann beim debug-Build nicht mehr der Dateiname gesetzt.
Setzte ich statt release zusätzlich build_all, sind die Dateinamen zwar richtig, nur erzeugt "make" dann logischerweise immer beide Versionen.

Hat jemand dafür eine Lösung?

BeniBela
benibela
Beiträge: 17
Registriert: 23. Januar 2009 21:22

Beitrag von benibela »

ping
benibela
Beiträge: 17
Registriert: 23. Januar 2009 21:22

Beitrag von benibela »

pong...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hast Du es so gemacht wie hier beschrieben? Wenn ja kannst Du ggf. mal ein kleines Testprojekt schreiben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
benibela
Beiträge: 17
Registriert: 23. Januar 2009 21:22

Beitrag von benibela »

Ja, ich habe jetzt zwei Varianten, die beide nicht richtig funktionieren:
1. die ganz normale, wo man mittels make debug und make release jeweils eine Version erzeugen kann.
Allerdings hat dann die debug und release Version den gleichen Dateinamen

Code: Alles auswählen

---texmakerx.pro:---
TEMPLATE	= subdirs 
CONFIG = $$unique(CONFIG)
CONFIG -= debug debug_and_release release
CONFIG	+= ordered  debug_and_release
SUBDIRS += qcodeedit/lib/lib.pro \
           texmakerapp.pro

---texmakerapp.pro:---
TEMPLATE	=  app
CONFIG = $$unique(CONFIG)
CONFIG -= debug debug_and_release release
CONFIG	+= qt debug_and_release
POST_TARGETDEPS += qcodeedit/libqcodeedit.a
LIBS       += qcodeedit/libqcodeedit.a
...

---lib.pro---
TEMPLATE = lib
DESTDIR = ..
CONFIG = $$unique(CONFIG)
CONFIG -= debug debug_and_release release
CONFIG += staticlib debug_and_release
...
2. Eine wo die unterschiedlichen Dateinamen funktionieren, allerdings kann man nicht mehr mit make release die Release-version erstellen. (wenn man nicht zuvor make all aufgerufen hat, da sonst die Untermakefiles nicht erzeugt werden)

Code: Alles auswählen

---texmakerx.pro:---
TEMPLATE	= subdirs 
CONFIG	+= ordered  debug_and_release build_all
SUBDIRS += qcodeedit/lib \
           texmakerapp.pro

---texmakerapp.pro:---
TEMPLATE	=  app
CONFIG	+= qt debug_and_release build_all

CONFIG(debug, debug|release) {
  POST_TARGETDEPS  += qcodeedit/libqcodeeditd.a
  LIBS        += qcodeedit/libqcodeeditd.a
  TARGET	 = texmakerxd
} else {
  POST_TARGETDEPS += qcodeedit/libqcodeedit.a
  LIBS       += qcodeedit/libqcodeedit.a
  TARGET	 = texmakerx
}
... 

---lib.pro---
TEMPLATE = lib
CONFIG += staticlib debug_and_release build_all

CONFIG(debug, debug|release) {
  TARGET = qcodeeditd
  MOC_DIR = .buildd
  OBJECTS_DIR = .buildd
} else {
  TARGET = qcodeedit
  MOC_DIR = .build
  OBJECTS_DIR = .build
}
...
Also, wie muss man die kombinieren?

Benito
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich liebe qmake... *grml* gut das wir das schon lange in die Mülltonne geworfen haben :)
Ich kann nur raten aber bei den Beispielen und auch in den qt-sourcen ist immer noch von build_pass die Rede:
!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
TARGET = $$member(TARGET, 0)d
}
}
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
benibela
Beiträge: 17
Registriert: 23. Januar 2009 21:22

Beitrag von benibela »

Könnte sein, dass build_pass funktioniert, nur leider steht nichts davon in der Qt4.3 Dokumentation. Und da IMHO der Rest des Programmes unter 4.3 compilerbar ist, wäre es blöd nur wegen qmake darauf zu verzichten.

Wenn ihr es im Müll habt, gibt es denn ein anderes Tool, welches man verwenden kann? (und das auch überall, wo QT installiert ist, vorhanden ist)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Naja - warum sollte Qt zwei Buildsysteme mitliefern?
Ich benutze nur noch CMake (beruflich und privat)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten