获取Qt 5附加插件的路径

时间:2013-01-06 15:11:01

标签: dll plugins cmake qt5

在Qt 4项目中,我使用Inno Setup构建了一个Windows安装程序。所需的库(qsqlite.dll,qjpeg4.dll等)包含在CMake变量中,例如QT_QSQLITE_PLUGIN_RELEASEQT_QJPEG_PLUGIN_RELEASE

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

现在项目应该迁移到Qt5。一切正常,但我找不到预先定义的变量来获得这些插件路径的Qt5等价物。当然,我可以对它们进行硬编码,但我正在寻找一种以干净和独立的方式定义它的方法。

3 个答案:

答案 0 :(得分:11)

Qt5不再依赖CMake模块文件来查找Qt5安装,而是提供自己的CMake配置文件,该文件将Qt5库设置为导入的CMake目标。要获取Qt模块库文件的实际路径,请查询模块的CMake目标的LOCATION属性或其配置特定的变体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)

这个策略可能也适用于Qt插件,前提是你知道插件的CMake目标名称(我还没有验证过)。

另见Qt5 CMake manual

答案 1 :(得分: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将处理配置部分。

答案 2 :(得分: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}")