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

时间:2016-03-16 09:12:00

标签: c++ cmake mingw cross-compiling mxe

目前我正在尝试使用MinGW和Linux的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可执行文件获取依赖库而无需直接复制它们?

1 个答案:

答案 0 :(得分:1)

在最新的cmake版本中,有file GET_RUNTIME_DEPENDENCIES命令可在安装时获取二进制依赖性。