ich zusammen die eine Lösung geschabt OP-Problem durch Verwendung der Antwort vorgeschlagen von @ vsz in den Kommentaren gefunden here.
Ich habe zwei Kits, eine für den lokalen Desktop und eine für das Target_ARM-Gerät, und ich wollte eine Möglichkeit, einfach für beide zu bauen, ohne die Datei .pro
oder etwas anderes zu ändern. Ich folgte die verknüpfte Antwort und fügte hinzu, die folgenden:
- In meinem Desktop-Kit (für beide Debug und Release), habe ich
CONFIG+=Desktop
als zusätzliches qmake
Argument in der qmake
Build-Schritt.
- Für das Target_ARM-Kit habe ich
CONFIG+=Target_ARM
an der gleichen Stelle hinzugefügt.
Nun, das ist, wo Dinge von der verknüpften Antwort auf das OP-Problem verschoben. Ich wollte nicht einfach #define
ed Variablen in meinem Code, ich wollte das Verhalten von qmake
basierend auf dem ausgewählten Kit ändern. Ich weiß nicht, ob die integrierte Testfunktion CONFIG
Blockbezeichnungen unterstützt oder nicht (dh CONFIG { _several lines here_ }
), aber es stellte sich heraus, dass ich die Testfunktion CONFIG
vor jeder Zeile kopieren und einfügen konnte, die ich bedingt haben wollte; in der Tat könnte ich String mehrere CONFIG
s zusammen, wie folgt aus:
CONFIG(Desktop, Desktop|Target_ARM):unix:!macx:CONFIG(debug, debug|release): LIBS += /path/to/Desktop/debug/lib
else:CONFIG(Desktop, Desktop|Target_ARM):unix:!macx:CONFIG(release, debug|release): LIBS += /path/to/Destop/release/lib
Wie es schon sagt, die obige Aussage qmake
mit den entsprechenden LIBS
Pfad je nachdem, welcher Kit und Konfiguration ausgeführt werde ich ausgewählt haben. Desktop->debug
erzeugt ein Makefile mit /path/to/Desktop/debug/lib
darin, während Desktop->release
ein Makefile mit /path/to/Desktop/release/lib
erzeugt. Ich habe ähnliche Aussagen für den Target_ARM
Kit. Unten ist ein Beispiel für die Auswahl der richtigen INCLUDEPATH
: Beide Tests werden als wahr ausgewertet, wenn Target_ARM->release
ausgewählt ist.
CONFIG(Target_ARM, Desktop|Target_ARM):CONFIG(release, debug|release): INCLUDEPATH += /include/path/for/Target_ARM/release
Insgesamt habe ich diese Methode LIBS, INCLUDEPATH, DEPENDPATH, and PRE_TARGETDEPS
zu ändern.Ich habe 4 mögliche Konfigurationen von Include-Pfaden und Bibliotheken, abhängig davon, welches Kit ich auswähle (Desktop
oder Target_ARM
) und welche Build-Konfiguration ich auswähle (build
oder release
). Sobald dies eingerichtet ist, besteht keine Notwendigkeit, die Datei .pro
zu ändern, wählen Sie einfach Ihr Kit, Ihre Build-Konfiguration, führen Sie qmake
, und dann neu erstellen.
Ich weiß nicht aus der Spitze meines Kopfes, wo die CONFIG+=Desktop
(zum Beispiel) Daten gespeichert ist, aber ich würde in der Datei .pro.user
erraten. Wenn also jemand Ihre .pro
Datei aus einem Repo zieht, muss er möglicherweise das Projekt auf diese Weise mindestens einmal konfigurieren, aber nicht danach (solange die .pro.user
Datei bestehen bleibt). QT sollte wirklich einen einfachen Mechanismus für diese Front-und-Center haben, zumal eines ihrer Verkaufsargumente Multiple-Plattform-Integration ist. Wenn es einen besseren Weg dafür gibt, habe ich es noch nicht in SO oder in der QT-Dokumentation gesehen.
Es gibt eine andere interessante Antwort hier: http://stackoverflow.com/questions/24912778/qtcrea-or-kit-specific-precompiler-macro-definitionen – vsz