【问题标题】:Get path of Qt 5 additional plugins获取 Qt 5 附加插件的路径
【发布时间】:2012-12-20 10:39:17
【问题描述】:

在一个 Qt 4 项目中,我使用 Inno Setup 构建了一个 Windows 安装程序。所需的库(qsqlite.dll、qjpeg4.dll 等)包含在带有 CMake 变量的脚本中,例如 QT_QSQLITE_PLUGIN_RELEASEQT_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 等效项。当然,我可以对它们进行硬编码,但我正在寻找一种方法来以一种干净且独立的方式对其进行定义。

【问题讨论】:

  • 不确定答案,但您可以使用this answer中描述的技术检查所有变量
  • 是的,我正是使用这个宏来查找下面提到的 Qt4 变量。但是使用相同的,我找不到 Qt5 等价物。所有 cmake 的东西都为新版本的框架重写了,一些信息被存储为目标属性。但我没有找到任何方法来调试 Qt5 目标上的属性。

标签: dll plugins cmake qt5


【解决方案1】:

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

【讨论】:

  • 你说得对,但是我没有在 Qt5XXXConfig[Version].cmake 文件中找到正确的目标属性集,而且我没有找到与this one 相同的宏但是属性。
  • 到 Qt5 CMake 手册的链接断开
  • 我在寻找其他问题时得出了这个答案。长话短说:将“_Release”(在我的例子中是“_Debug”)附加到 get_target_property() 的 LOCATION arg 正是我需要的。我需要控制要复制到特定位置的 Qt 库的哪个版本,这样就成功了。
【解决方案2】:

从 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 将处理配置部分。

【讨论】:

    【解决方案3】:

    以 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}")
    

    【讨论】:

    • 你的答案不正确。读取 LOCATION 而不是 LOCATION_Release。
    • 我从 LOCATION 开始但更改了它,因为最初的问题只是寻找发布插件。你当然可以让 CMake 处理配置。
    • 我一小时前才开始使用 Qt 和 CMake,我无法相信整个过程是多么精简。没有超级文档记录,但这是 stackoverflow 的救命稻草。
    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 2014-07-13
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多