Seite 1 von 1
qmake: debug & release
Verfasst: 23. Januar 2009 22:01
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
Verfasst: 10. Februar 2009 00:17
von benibela
ping
Verfasst: 13. März 2009 22:08
von benibela
pong...
Verfasst: 13. März 2009 22:16
von Christian81
Hast Du es so gemacht wie
hier beschrieben? Wenn ja kannst Du ggf. mal ein kleines Testprojekt schreiben.
Verfasst: 14. März 2009 12:58
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
Verfasst: 14. März 2009 13:38
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
}
}
Verfasst: 14. März 2009 14:44
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)
Verfasst: 14. März 2009 15:20
von Christian81
Naja - warum sollte Qt zwei Buildsysteme mitliefern?
Ich benutze nur noch CMake (beruflich und privat)