Ich habe ein Qt-Projekt und möchte Kompilierungsdateien außerhalb des Quellbaums ausgeben.
Ich habe derzeit die folgende Verzeichnisstruktur:
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
Abhängig von der Konfiguration (Debug / Release) möchte ich die resultierenden Dateien im Build-Verzeichnis unter den Verzeichnissen build / debug oder build / release ausgeben.
Wie kann ich das mit einer .pro-Datei machen?
Antworten:
Die kurze Antwort lautet: Sie nicht .
Sie sollten
qmake
gefolgt von demmake
Build-Verzeichnis ausführen, in das Sie erstellen möchten. Führen Sie es also einmal in einemdebug
Verzeichnis und einmal in einemrelease
Verzeichnis aus.So würde jeder, der Ihr Projekt erstellt, erwarten, dass es funktioniert, und so ist Qt selbst für die Erstellung eingerichtet. So erwartet Qt Creator auch, dass sich Ihre
.pro
Datei verhält: Sie startet einfachqmake
und befindet sich dannmake
im Erstellungsordner für die von Ihrem Ziel ausgewählte Konfiguration.Wenn Sie diese Ordner erstellen und die zwei (oder mehr) Builds in ihnen ausführen möchten, benötigen Sie ein Makefile der obersten Ebene, das möglicherweise über qmake aus einer Projektdatei der obersten Ebene erstellt wurde.
Es ist nicht ungewöhnlich, dass mehr als zwei Build-Konfigurationen vorhanden sind. Sie verpflichten sich daher unnötig, nur zwischen einem Build und einem Release zu unterscheiden. Möglicherweise haben Sie Builds mit unterschiedlichen Optimierungsstufen usw. Die Dichotomie zwischen Debug und Release lässt sich am besten in Ruhe.
quelle
Für mein Qt-Projekt verwende ich dieses Schema in der * .pro-Datei:
Es ist einfach, aber schön! :) :)
quelle
DESTDIR
s nur bedingt und verwenden Sie diesen Wert dann in allen anderen Pfaden :OBJECTS_DIR = $${DESTDIR}/.obj
. Prost!Debug
aufdebug
undRelease
um wechselnrelease
.Verwenden Sie dies in Ihrer Pro-Datei, um das Verzeichnis für die Ziel-DLL / Exe zu ändern:
Möglicherweise möchten Sie auch Verzeichnisse für andere Build-Ziele wie Objektdateien und MOC-Dateien ändern ( Details finden Sie unter qmake-Variablenreferenz oder qmake CONFIG () -Funktionsreferenz ).
quelle
OBJECTS_DIR = $$DESTDIR/.obj MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui
CONFIG()
stellt sich heraus, einige Probleme bei der Verwendung vonrelease:
unddebug:
Ich habe einen kompakteren Ansatz:
quelle
Der richtige Weg, dies zu tun, ist der folgende (danke QT Support Team):
Weitere Informationen finden Sie hier: https://wiki.qt.io/Qt_project_org_faq#What_does_the_syntax_CONFIG.28debug.2Cdebug.7Crelease.29_mean_.3F_What_does_the_1st_argument_specify_and_sim_
quelle
Ich benutze die gleiche Methode, die von Chalup vorgeschlagen wurde.
quelle
Alte Frage, aber dennoch eine aktuelle Antwort wert. Heutzutage ist es üblich, das zu tun, was Qt Creator tut, wenn Schattenbuilds verwendet werden (diese werden standardmäßig beim Öffnen eines neuen Projekts aktiviert).
Für jedes unterschiedliche Build-Ziel und jeden unterschiedlichen Build-Typ wird das Recht
qmake
mit den richtigen Argumenten in einem anderen Build-Verzeichnis ausgeführt. Dann wird das einfach mit einfach gebautmake
.Die imaginäre Verzeichnisstruktur könnte also so aussehen.
Und das Wichtigste ist, dass a
qmake
im Build-Verzeichnis ausgeführt wird:Dann generiert es Makefiles im Build-Verzeichnis und
make
generiert auch Dateien darunter. Es besteht kein Risiko, dass verschiedene Versionen verwechselt werden, solange qmake nie im Quellverzeichnis ausgeführt wird (wenn ja, bereinigen Sie es besser!).Und wenn dies so gemacht wird, ist die
.pro
Datei aus der aktuell akzeptierten Antwort noch einfacher:quelle
$(OUT_PWD)
eine Lösung?mylib
? Ich würde es mögen, wenn es einen "anmutigen" Weg gäbe, dies zu tun. Ich sehe keinen anderen Weg als die Techniken aus den anderen Antworten zu verwenden: Verwenden Sie den Build-Typ und die Konfiguration, um aufLIBS
intelligente Weise zu füllen und aufzuheben der Vorteil des Schattenbaus.include(../mylib/mylib.pri)
Es ist auch nützlich, einen etwas anderen Namen für die ausführbare Ausgabedatei zu haben. Sie können so etwas nicht verwenden:
Warum es nicht funktioniert, ist nicht klar, aber es funktioniert nicht. Aber:
Dies funktioniert so lange, wie die
CONFIG +=
Zeile davor steht.quelle
Die neue Version von Qt Creator verfügt außerdem über eine "Profil" -Erstellungsoption zwischen Debug und Release. So erkenne ich das:
quelle
1. Suchen Sie Debug / Release in CONFIG
Holen Sie sich die aktuelle (Debug | Release).
(Kann mehrfach sein, also nur das zuletzt im Build angegebene beibehalten):
2. Stellen Sie DESTDIR ein
Verwenden Sie es hat den Build-Unterverzeichnisnamen
quelle
Dies ist mein Makefile für verschiedene Debug- / Release-Ausgabeverzeichnisse. Dieses Makefile wurde erfolgreich unter Ubuntu Linux getestet. Es sollte nahtlos unter Windows funktionieren, vorausgesetzt, Mingw-w64 ist korrekt installiert.
quelle