8

目前我正在尝试使用 Linux 中的 MinGW 和 CMake 为 Windows 部署 Qt 应用程序。我使用 MXE 准备构建环境(安装 mingw32 并编译 Qt5 共享库)。我已经编写了 CMakeList.txt 和一个工具链脚本,他们可以构建我的应用程序。

我无法实现的是将共享的 Qt dll 传递给我构建的可执行文件。

这是我的工具链文件: http: //pastebin.com/gh7kSda4

这是我的 CMakeLists.txt: http://pastebin.com/wHA7f7Sj

这是该脚本的摘录,其中包含安装部分:

# Installation.
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/${TOOLCHAIN}-Bundle)
install(TARGETS mEyeSaver
        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
install(CODE "
        include(BundleUtilities)
        fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/mEyeSaver${TOOLCHAIN_EXECUTABLE_FORMAT}\" \"\" \"${QT5_PATH}/bin\")
" COMPONENT Runtime)

如您所见,我使用 fixup_bundle 来实现我的目标。

输入后,make install我得到以下输出: http: //pastebin.com/DymaH1Mu

x86_64-w64-mingw32-Bundle之后,文件夹中除了 mEyeSaver.exe 之外什么都没有。没有 dll 被复制。我确定~/mxe/usr/x86_64-w64-mingw32.shared/qt5/bin文件夹中需要 Qt dll。但是我仍然做错了一些事情。

如何解决问题?谢谢

更新

我重新考虑了我正在做的事情,发现可能 fixup_bundle 无法分析 Windows 可执行文件的依赖关系,因为 Linux ldd(它使用的)与 Windows 应用程序无关。所以我编辑了我的问题。

是否有任何简单的方法可以使用 CMake(或其他工具)为 Windows 可执行文件获取依赖库,而无需直接复制它们?

4

1 回答 1

1

在上一个 cmake 版本中,有文件 GET_RUNTIME_DEPENDENCIES命令可以在安装时获取二进制依赖项。

于 2020-02-03T12:04:53.747 回答