Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dll 获取Qt5附加插件的路径_Dll_Plugins_Cmake_Qt5 - Fatal编程技术网

Dll 获取Qt5附加插件的路径

Dll 获取Qt5附加插件的路径,dll,plugins,cmake,qt5,Dll,Plugins,Cmake,Qt5,在Qt4项目中,我使用Inno Setup构建了一个Windows安装程序。所需的库(qsqlite.dll、qjpeg4.dll等)包含在脚本中,并带有CMake变量,例如QT\u qsqlite\u PLUGIN\u RELEASE或QT\u QJPEG\u PLUGIN\u RELEASE 例如:setup.iss.in: [Files] Source: "myapp.exe"; DestDir: {app} Source: "${QT_QSQLITE_PLUGIN_RELEASE}";

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

Qt5不再依赖CMake模块文件来查找Qt5安装,而是提供自己的CMake配置文件,该文件将Qt5库设置为导入的CMake目标。要获取Qt模块库文件的实际路径,请查询模块的CMake目标或其配置特定变量的
位置
属性,例如:

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目标名称(我还没有验证)


另请参见。

从Qt 5.2开始,插件也可以作为导入目标提供:


从导入的目标读取位置属性,而不是特定于配置的位置属性。CMake将处理配置部分。

基于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}")

不确定答案,但您可以使用中描述的技术检查所有变量是的,我正是使用这个宏查找下面提到的Qt4变量。但是用同样的方法,我找不到Qt5的等价物。所有cmake的内容都已为新版本的框架重写,一些信息存储为目标属性。但我没有找到任何方法调试Qt5目标上的属性。你说得对,但我在QT5xxconfig[Version].cmake文件中没有找到正确的目标属性集,也没有找到与属性具有相同功能的宏。Qt5 cmake手册的链接断开我在搜索另一个问题时得到了这个答案。长话短说:在get_target_property()的位置arg中添加“_Release”(在我的例子中是“_Debug”)正是我所需要的。我需要控制复制到特定位置的Qt库的哪个版本,这就成功了。你的答案不正确。阅读LOCATION而不是LOCATION\u Release。我从LOCATION开始,但更改了它,因为最初的问题只是寻找Release插件。你当然可以让CMake来处理配置。我一小时前才开始使用Qt和CMake,我简直不敢相信整个过程是多么的简化。不是超级文档,但这就是stackoverflow的救命之道。