8

Qt 4 プロジェクトで、Inno Setup を使用して Windows インストーラーをビルドします。必要なライブラリ (qsqlite.dll、qjpeg4.dll など) は、 や などの CMake 変数を使用してスクリプトに含まれていQT_QSQLITE_PLUGIN_RELEASEますQT_QJPEG_PLUGIN_RELEASE

例: 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 を取得するための事前定義された変数が見つかりません。もちろん、ハードコードすることもできますが、クリーンで独立した方法で定義する方法を探しています。

4

3 に答える 3

14

Qt5 は、Qt5 インストールを見つけるために CMake モジュール ファイルに依存しなくなりましたが、インポートされた CMake ターゲットとして Qt5 ライブラリを設定する独自の CMake 構成ファイルを提供します。Qt モジュール ライブラリ ファイルへの実際のパスを取得するにLOCATIONは、モジュールの CMake ターゲットまたはその構成固有のバリアントLOCATION_<Config>バージョンのプロパティをクエリします。

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)

プラグインの CMake ターゲット名を知っていれば、この戦略はおそらく Qt プラグインにも適用されます (私は確認していません)。

Qt5 CMakeのマニュアルも参照してください。

于 2013-02-24T21:22:02.420 に答える
4

Qt 5.2 以降、プラグインは IMPORTED ターゲットとしても利用できます。

http://doc.qt.io/qt-5/cmake-manual.html#imported-targets

https://codereview.qt-project.org/#change,63100

構成固有の LOCATION_ プロパティではなく、IMPORTED ターゲットから LOCATION プロパティを読み取ります。CMake は構成部分を処理します。

于 2013-10-18T09:01:23.610 に答える
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}")
于 2014-03-11T18:21:57.067 に答える