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 不再依赖 CMake 模块文件来查找 Qt5 安装,而是提供了自己的 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

从 IMPORTED 目标读取 LOCATION 属性,而不是特定于配置的 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 回答