我正在使用CMake构建一个Qt应用程序。我的项目编译,并且由于'fixup_bundle()',make install
复制了我的可执行文件旁边的所需库。太好了!
唯一的问题是,当我执行它时,我得到了可怕的'这个应用程序无法启动,因为它无法找到或加载Qt平台插件“windows”。错误。
实际上,手动将qwindows.dll复制到可执行文件旁边的“平台”目录中可以解决问题。现在,我如何告诉CMake自动执行此操作?
来自Qt的信息不多:
插件也可作为CMake中的IMPORTED目标。 Qt网络,Qt SQL,Qt GUI和Qt Widgets模块具有关联的插件。它们提供了Qt5_PLUGINS变量中的插件列表。
好吧,我想我必须使用Qt5 :: QWindowsIntegrationPlugin,它应该是导入的目标。那就是我失去的地方。
我知道(好吧,我想我至少知道)fixup_bundle()查看可执行文件以查找其依赖项。但是,尽管我将我的可执行文件链接到QWindowsIntegrationPlugin,但它没有任何痕迹。因此,fixup_bundle()没有将qwindows.dll复制到我的输出路径中。
除了文件的手动副本,我找不到一个很好的CMake友好的答案来解决这个问题。
感谢您的帮助。
答案 0 :(得分:2)
碰到同样的问题。这是我在CMake安装脚本中解决该问题的方法:
# QWindowsIntegrationPlugin is part of the Gui component
find_package(Qt5 COMPONENTS Gui REQUIRED)
install(
FILES "$<TARGET_FILE:Qt5::QWindowsIntegrationPlugin>"
DESTINATION bin/platforms
)