że ociera razem roztwór do Problem OP za pomocą odpowiedzi sugerowanej przez @vsz w komentarzach znalezionych here.
Mam dwa zestawy, jeden dla lokalnego pulpitu i jeden dla urządzenia Target_ARM, i chciałem sposób na łatwe zbudowanie dla obu tych bez konieczności specjalnego modyfikowania pliku .pro
lub cokolwiek innego. I następnie połączony odpowiedź i dodaje następujące:
- W moim zestawie pulpitu (zarówno dla debugowania i uwalniania), dodałem
CONFIG+=Desktop
jako dodatkowy argument w qmake
qmake
etapie kompilacji.
- W przypadku zestawu Target_ARM dodano w tym samym miejscu
CONFIG+=Target_ARM
.
To właśnie w tym momencie sprawy zmieniły się z połączonej odpowiedzi na problem PO. Nie chciałem po prostu #define
ed zmiennych w moim kodzie, chciałem zmienić zachowanie qmake
w oparciu o wybrany zestaw. Nie wiem, czy wbudowana funkcja testowa CONFIG
obsługuje oznaczenia bloków, czy nie (np. CONFIG { _several lines here_ }
), ale okazało się, że mogę skopiować i wkleić funkcję testową CONFIG
przed każdą linią, którą chciałem być warunkową; w rzeczywistości mogłem ciąg wielokrotnego CONFIG
y razem, podobnie jak to:
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
Jak to sugeruje, powyższe zestawienie będzie działać qmake
z odpowiednim LIBS
ścieżka w zależności od zestawu i konfiguracji wybrałem. Desktop->debug
wygeneruje plik Makefile z /path/to/Desktop/debug/lib
w nim, podczas gdy Desktop->release
wygeneruje plik Makefile z /path/to/Desktop/release/lib
. Mam podobne stwierdzenia dla zestawu Target_ARM
. Poniżej znajduje się przykład wyboru prawidłowego INCLUDEPATH
: oba testy zostaną ocenione na true, gdy wybrana zostanie opcja Target_ARM->release
.
CONFIG(Target_ARM, Desktop|Target_ARM):CONFIG(release, debug|release): INCLUDEPATH += /include/path/for/Target_ARM/release
W sumie użyłem tej metody do modyfikacji LIBS, INCLUDEPATH, DEPENDPATH, and PRE_TARGETDEPS
.Mam 4 możliwe konfiguracje ścieżek dołączania i bibliotek w zależności od tego, który zestaw wybiorę (Desktop
lub Target_ARM
) i które zbuduję konfigurację, którą wybrałem (build
lub release
). Po skonfigurowaniu nie ma potrzeby modyfikowania pliku .pro
, wystarczy wybrać zestaw, konfigurację kompilacji, uruchomić qmake
, a następnie odbudować.
Nie wiem od początku, gdzie przechowywane są dane CONFIG+=Desktop
(na przykład), ale zgaduję w pliku .pro.user
. Więc jeśli ktoś wyciągnie twój plik .pro
z repozytorium, być może będzie musiał najpierw skonfigurować projekt w ten sposób co najmniej raz, ale nie później (o ile plik .pro.user
nie zniknie). QT powinna naprawdę mieć łatwy mechanizm do przeprowadzania tego front-center, zwłaszcza, że jednym z ich punktów sprzedaży jest integracja wieloplatformowa. Jeśli jest lepszy sposób na zrobienie tego, nie widziałem go jeszcze na SO lub w dokumentacji QT.
Jest tu jeszcze jedna ciekawa odpowiedź: http://stackoverflow.com/questions/24912778/qtcreator-kit-specific-precompiler-macro-definitions – vsz