2013-01-06 55 views
6

在Qt 4項目中,我使用Inno Setup構建了Windows安裝程序。使用CMake變量(如QT_QSQLITE_PLUGIN_RELEASEQT_QJPEG_PLUGIN_RELEASE)的腳本中包含所需的庫(qsqlite.dll,qjpeg4.dll等)。獲取Qt 5個額外插件的路徑

例如: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 

目前該項目應遷移到QT5。一切工作正常,但我找不到預定義的變量來獲得這些插件路徑相當於Qt5。當然,我可以對它們進行硬編碼,但我正在尋找一種以乾淨和獨立的方式來定義它的方法。

+0

不知道答案,但你可以檢查使用[此描述的技術的所有變量回答](http://stackoverflow.com/a/9328525/424459) – Fraser

+0

是的,我用這個宏來查找下面用Qt4提到的變量。但使用相同的,我無法找到相當於Qt5的。 所有cmake的東西都被重新編譯爲新版本的框架,並且一些信息被存儲爲目標屬性。但我沒有找到任何方式來調試Qt5目標上的屬性。 – Antwane

回答

11

Qt5不再依賴CMake模塊文件來查找Qt5安裝,而是提供自己的CMake配置文件,該文件將Qt5庫設置爲導入的CMake目標。爲了獲得對Qt的模塊庫文件的實際路徑,查詢模塊的CMake的目標或它的配置特定變種LOCATION_<Config>版本,例如在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) 

這種策略可能也適用於Qt的插件,只要你知道插件的CMake目標名稱(我沒有證實)。

另請參閱Qt5 CMake manual

+0

你是對的,但我沒有在Qt5XXXConfig [Version] .cmake文件中找到正確的目標屬性集,而且我沒有找到與[this this](http:// stackoverflow。 com/a/9328525/424459),但屬性。 – Antwane

+0

鏈接到Qt5 CMake手冊 – Joakim

+0

@Joakim鏈接固定 – sakra

0

上steveire的回答大廈,這是你如何將得到的QSqlite和QJpeg插件的絕對路徑:

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

您的回答不正確。閱讀LOCATION而不是LOCATION_Release。 – steveire

+0

我開始使用LOCATION,但改變了它,因爲原來的問題只是尋找發佈插件。您當然可以讓CMake處理配置。 – axelstudios