linux系统qt应用程序打包,linux – 如何使用CPack以特定方式为QT应用程序打包依赖项?...

我有一个简单的QT项目.我正在

Linux上开发.但它最终要部署到Linux,Mac和Windows.

我正在尝试打包它以便分发.我遇到了查找依赖项并将其打包并以惯用方式执行此操作的问题(IOW:没有硬编码的DLL路径或包含我的源代码库中的DLL)

对于Windows端口,我正在使用MinGW并进行如下编译:

mingw64-cmake -G "Unix Makefiles" .. -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake

make && ctest && make install && cpack -G "TGZ" && cpack -G "NSIS64"

我已将其设置为生成tar.gz文件和NSIS安装程序.目前没有特别的理由让NSIS而不是Wix.这只是为了解决问题.

它编译Windows可执行文件,但它不包括运行该程序所需的DLL.就是这些:

Libgcc_s_seh-1.dll

Qt5Core.dll

Qt5Gui.dll

在我的计算机上快速查找显示这些DLL存在于此处:

/usr/x86_64-w64-mingw32/sys-root/mingw/bin/Qt5Widgets.dll

/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_seh-1.dll

...

有没有办法自动让CPack挖掘DLL并将它们包含在安装程序中?

这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8.11)

project(myapp)

enable_testing()

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTORCC ON)

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(Qt5Core REQUIRED)

find_package(Qt5Gui REQUIRED)

find_package(Qt5Widgets REQUIRED)

add_executable(myapp WIN32 main.cpp mainwindow.cpp resources.qrc)

target_link_libraries(myapp Qt5::Widgets)

target_link_libraries(myapp Qt5::Core)

target_link_libraries(myapp Qt5::Gui)

INSTALL(TARGETS myapp

BUNDLE DESTINATION .

RUNTIME DESTINATION bin

LIBRARY DESTINATION lib

ARCHIVE DESTINATION lib

)

INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT Libraries)

IF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)

INSTALL(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT System)

ENDIF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)

INCLUDE(CPack)

我四处寻找一些帮助.我遇到的最好的事情是

this link

但它看起来并不那么惯用.如果我们仔细观察CMakeLists.txt文件,它将获得特定于机器的硬编码路径,这些路径将来肯定会发生变化:

IF( WIN32 AND ${ARCH_32BIT})

SET(QT_INSTALLED_PATH "C:/QtMSVCX86/Qt5.5.0/5.5/msvc2013" )

ELSEIF(WIN32 AND ${ARCH_64BIT})

SET(QT_INSTALLED_PATH "C:/QtMSVCX64/Qt5.5.0/5.5/msvc2013_64" )

ELSEIF(UNIX AND NOT MINGW AND ${ARCH_32BIT})

SET(QT_INSTALLED_PATH "/opt/Qt5.5.0/5.5/gcc/" )

ELSEIF(UNIX AND NOT MINGW AND ${ARCH_64BIT})

SET(QT_INSTALLED_PATH "/opt/Qt5.5.0/5.5/gcc_64/" )

ENDIF()

SET(CMAKE_AUTOMOC ON)

SET(CMAKE_AUTOUIC ON)

SET(CMAKE_AUTORCC ON)

FIND_PACKAGE(Qt5Widgets PATHS ${QT_INSTALLED_PATH} NO_DEFAULT_PATH)

FIND_PACKAGE(Qt5Qml PATHS ${QT_INSTALLED_PATH} NO_DEFAULT_PATH)

FIND_PACKAGE(Qt5Quick PATHS ${QT_INSTALLED_PATH} NO_DEFAULT_PATH)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值