ho raschiato insieme una soluzione al Problema dell'OP utilizzando la risposta suggerita da @vsz nei commenti trovati here.
Ho due kit, uno per il desktop locale e uno per il dispositivo Target_ARM, e volevo un modo per creare facilmente per entrambi senza dover modificare appositamente il file .pro
o qualsiasi altra cosa. Ho seguito la risposta legata e ha aggiunto il seguente:
- nel mio kit desktop (sia per il debug e rilascio), ho aggiunto
CONFIG+=Desktop
come un ulteriore qmake
argomento nella fase qmake
build.
- Per il kit Target_ARM, ho aggiunto
CONFIG+=Target_ARM
nello stesso punto.
Ora, questo è il punto in cui le cose sono passate dalla risposta collegata al problema dell'OP. Non volevo semplicemente variabili #define
nel mio codice, volevo modificare il comportamento di qmake
in base al kit selezionato. Non so se la funzione di test integrata CONFIG
supporti o meno le denominazioni del blocco (ad esempio, CONFIG { _several lines here_ }
), ma è risultato che potevo copiare e incollare la funzione di prova CONFIG
davanti a ciascuna riga che volevo essere condizionale; infatti ho potuto stringa multipla CONFIG
s insieme, in questo modo:
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
Come suggerisce, l'istruzione precedente verrà eseguito qmake
con il percorso appropriato LIBS
seconda del kit e configurazione ho selezionato. Desktop->debug
genererà un Makefile con /path/to/Desktop/debug/lib
mentre Desktop->release
genererà un Makefile con /path/to/Desktop/release/lib
. Ho dichiarazioni simili per il kit Target_ARM
. Di seguito è riportato un esempio di selezione del INCLUDEPATH
corretto: entrambi i test verranno valutati su true quando è selezionato Target_ARM->release
.
CONFIG(Target_ARM, Desktop|Target_ARM):CONFIG(release, debug|release): INCLUDEPATH += /include/path/for/Target_ARM/release
In tutto, ho usato questo metodo per modificare LIBS, INCLUDEPATH, DEPENDPATH, and PRE_TARGETDEPS
.Ho 4 possibili configurazioni di includere percorsi e librerie a seconda del kit che seleziono (Desktop
o Target_ARM
) e quale configurazione di configurazione seleziono (build
o release
). Una volta impostato, non è necessario modificare il file .pro
, selezionare semplicemente il kit, la configurazione di build, eseguire qmake
, quindi ricostruire.
Non so in cima alla mia testa dove sono memorizzati i dati CONFIG+=Desktop
(ad esempio), ma suppongo nel file .pro.user
. Quindi, se qualcuno preleva il tuo file .pro
da un repo, potrebbe dover configurare inizialmente il progetto in questo modo almeno una volta, ma non in seguito (finché il file .pro.user
persiste). QT dovrebbe davvero avere un meccanismo semplice per fare questo front-and-center, soprattutto perché uno dei loro punti vendita è l'integrazione multipiattaforma. Se c'è un modo migliore per farlo, non l'ho ancora visto su SO o nella documentazione di QT.
C'è un'altra risposta interessante qui: http://stackoverflow.com/questions/24912778/qtcreator-kit-specific-precompiler-macro-definitions – vsz