c++之从 Linux 构建 Windows 应用程序时,如何使用 CMake 获取它的依赖项
me-sa
阅读:30
2025-02-15 21:57:57
评论:0
目前,我正在尝试使用 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命令在安装时获取二进制依赖项。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。