2014-07-03 20 views
8

Mam projekt QT, który działa na Linuksie x86 i wbudowanym systemie ARM (yocto). Dla każdej platformy zdefiniowałem zestaw wewnątrz QtCreator, odwołując się do odpowiedniego kompilatora itp.Plik projektu Qt: Dodaj biblioteki zależnie od zestawu

Teraz chcę dodać LIBS do mojego pro, ale mam różne biblioteki na każdej platformie. Nie znalazłem sposobu na określenie dyrektywy LIBS zależnej od zestawu kompilującego.

wyszukać coś takiego:

if (Kit == "Desktop") 
    LIBS += ... 

if (Kit == "Embedded Yocto") 
    LIBS += ... 

Jak to osiągnąć? góry dziękuję

+1

Jest tu jeszcze jedna ciekawa odpowiedź: http://stackoverflow.com/questions/24912778/qtcreator-kit-specific-precompiler-macro-definitions – vsz

Odpowiedz

3

ż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 qmakeqmake 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.

1

Masz wszystkie zmienne QMake tutaj: qt-project.org/doc/qt-4.8/qmake-function-reference.html

Można zdefiniować zmienną

KIT = Desktop 
#KIT = EmbeddedYocto 

i wykorzystanie zawiera funkcyjne

contains(KIT, Desktop) { 
    LIBS += ... 
} 
contains(KIT, EmbeddedYocto) { 
    LIBS += ... 
} 
+1

Dziękuję za odpowiedź. Więc zmienię przypisanie zmiennej KIT, kiedy zmienię platformę docelową ... Właściwie miałem nadzieję, że mogę zapytać bieżący wybrany zestaw z QtCreatora z opcji kompilacji. – mbue

0
MY_QT_INSTALL_PREFIX=$$[QT_INSTALL_PREFIX] 
equals(MY_QT_INSTALL_PREFIX,"C:/Qt/Qt5.3.1/5.3/msvc2010_opengl"){ 
message($$[QT_INSTALL_PREFIX]) 
} 
Powiązane problemy