2013-01-06 4 views
6

W projekcie Qt 4 buduję instalator Windows, używając Inno Setup. Wymagane biblioteki (qsqlite.dll, qjpeg4.dll itp.) Są zawarte w skrypcie ze zmiennymi CMake, takimi jak QT_QSQLITE_PLUGIN_RELEASE lub QT_QJPEG_PLUGIN_RELEASE.Uzyskaj ścieżkę Qt 5 dodatkowych wtyczek

ex: setup.iss.in:

[Files] 
Source: "myapp.exe"; DestDir: {app} 
Source: "${QT_QSQLITE_PLUGIN_RELEASE}"; DestDir: {app}/sqldrivers 
Source: "${QT_QJPEG_PLUGIN_RELEASE}"; DestDir: {app}/imageformats 

Teraz projekt powinien migrować do Qt5. Wszystko działa dobrze, ale nie mogę znaleźć predefiniowanych zmiennych, aby uzyskać odpowiednik Qt5 dla tych ścieżek wtyczek. Oczywiście mogłem je zakodować, ale szukam sposobu na zdefiniowanie go w czysty i niezależny sposób.

+0

Nie pewny odpowiedzi, ale można zbadać wszystkie zmienne za pomocą techniki opisanej w [tym odpowiedź] (http://stackoverflow.com/a/9328525/424459) – Fraser

+0

Tak, użyłem właśnie tego makra, aby znaleźć zmienne wspomniane poniżej z Qt4. Ale używając tego samego, nie mogę znaleźć odpowiednika Qt5. Wszystkie pliki cmake zostały przepisane dla nowej wersji frameworka, a niektóre informacje są przechowywane jako właściwości docelowe. Ale nie znalazłem sposobu na debugowanie właściwości dla celów Qt5. – Antwane

Odpowiedz

11

Qt5 nie polega już na pliku modułu CMake w celu znalezienia instalacji Qt5, ale udostępnia własny plik konfiguracyjny CMake, który konfiguruje biblioteki Qt5 jako zaimportowane cele CMake. Aby uzyskać rzeczywistą ścieżkę do pliku, moduł biblioteki Qt, kwerendy właściwości modułu za cel CMake lub jego config konkretnego wariantu LOCATION_<Config> wersji, np LOCATION:

find_package(Qt5Core) 
get_target_property(QtCore_location_Release Qt5::Core LOCATION_Release) 

find_package(Qt5Widgets) 
get_target_property(QtWidgets_location_Release Qt5::Widgets LOCATION_Release) 

Strategia ta prawdopodobnie dotyczy również wtyczek Qt, pod warunkiem, że znamy nazwa docelowa plugin'a CMake (tego nie zweryfikowałem).

Zobacz także Qt5 CMake manual.

+0

Masz rację, ale nie znalazłem odpowiedniej właściwości docelowej w plikach Qt5XXXConfig [Version] .cmake i nie znalazłem makro, które robi tę samą sztuczkę co [this one] (http: // stackoverflow. com/a/9328525/424459), ale dla właściwości. – Antwane

+0

Zepsuty link do Qt5 CMake Manual – Joakim

+0

@Joakim link fixed – sakra

0

Opierając się na odpowiedź steveire, jest to, jak można uzyskać bezwzględną ścieżkę do QSqlite i QJpeg wtyczek:

find_package(Qt5Gui) 
find_package(Qt5Sql) 

get_target_property(qsqlite_loc Qt5::QSQLiteDriverPlugin LOCATION_Release) 
message("QSqlite DLL: ${qsqlite_loc}") 

get_target_property(qjpeg_loc Qt5::QJpegPlugin LOCATION_Release) 
message("QJpeg DLL: ${qjpeg_loc}") 
+0

Twoja odpowiedź jest nieprawidłowa. Czytaj LOCATION, a nie LOCATION_Release. – steveire

+0

Zacząłem od lokalizacji LOCATION, ale zmieniłem ją, ponieważ pierwotne pytanie dotyczyło tylko wtyczek wydania. Z pewnością możesz pozwolić CMake'owi obsługiwać konfigurację. – axelstudios