c++ - 从 Linux 构建 Windows 应用程序时,如何使用 CMake 获取它的依赖项?

标签 c++ cmake mingw cross-compiling mxe

目前,我正在尝试使用 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 可执行文件的依赖库而不直接复制它们?

最佳答案

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

关于c++ - 从 Linux 构建 Windows 应用程序时,如何使用 CMake 获取它的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031153/

相关文章:

c++ - 运行时的虚函数调用(std c++)

java - 头文件的优点/缺点

c++ - 使用STL从字符串中删除重复字符

cmake - CPack 无法使用 AppleScript 调整磁盘镜像和音量图标

c++ - boost 路径包含 Mingw 的困境

c++ - 将 LPWSTR 转换为字符串

c++ - 使用单个 makefile 编译 C 和 C++

python - SWIG 输入类型(C++ 到 Python)

c++ - 如何在#include 中让库名称位于 header 名称之前?

c - 如何在 Windows 上更新安装 GCC 11.2