exe打包工具_发布一键式打包脚本工具

v2-8bbbd7fc313266b997d7a44cfa81a164_1440w.jpg?source=172ae18b
只需在项目文件中 包含一段代码即可在编译完成时 自动打包程序的依赖库。(文末源码地址)

使用方法

  • 方法一:复制本脚本代码到你的项目文件(.pro)中。
  • 方法二:在项目文件pro中包含脚本文件即可。

原理实现

  • 根据qmake的QT变量获取对应模块,在打包时候将会有选择地打包
  • 打包前将会扫描本地的qml文件,找出需要打包的依赖库(插件)。
  • 通过qmake获取Qt官方提供的打包工具所在路径并调用实现程序的打包工作。
  • 由于qmake中获取Qt官方打包工具所在路径很方便,不用手动设置路径,使用上会更方便。
  • 通过qmake的参数判断还可以设置打包工具(windeployqt.exe)的参数命令。

附加功能

有关功能使用在脚本工具中有详细描述。

  • 由于QtCreator原始附带多个debugrelease配置变量,这样会导致qmake很慢,本脚本工具可以优化qmake运行速度,但默认不开启,因为它是实验性功能。
  • 调试输出宏,默认不开启
  • 打包完成后自动打开目标目录,默认开启

后续更新

  • 目前仅支持windows平台,后续将会支持更多的平台。
  • 针对第三方库打包的功能。
  • 优化模块有选择地打包的功能。
  • 优化QML打包的功能。
  • 优化打包缺库的问题。

部分源码

# 获取从QMake执行文件的所在目录得出Qt的bin路径
QT_BIN_DIR = $$replace(QMAKE_QMAKE, ^(S*/)S+$, 1)
# 获取Qt开发环境路径
QT_DIR = $${QT_BIN_DIR}../

# Qt打包工具参数配置集合
DEPLOY_OPTIONS += --force

# 可用的Qt模块
QT_AVAILABLE_LIBRARY_LIST = 
    bluetooth concurrent core declarative designer designercomponents enginio 
    gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc 
    opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets 
    script scripttools sensors serialport sql svg test webkit webkitwidgets 
    websockets widgets winextras xml xmlpatterns webenginecore webengine 
    webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation 
    3dextras geoservices webchannel texttospeech serialbus webview

# 扫描QT变量用于打包模块的参数配置
for (LIBRARY_MODULE, QT_AVAILABLE_LIBRARY_LIST) {
    if (contains(QT, $$LIBRARY_MODULE)) {
        DEPLOY_OPTIONS += --$$LIBRARY_MODULE
    }
    else {
        DEPLOY_OPTIONS += --no-$$LIBRARY_MODULE
    }
}

# 针对Qml模块配置打包参数
if (contains(QT, quick)) {
    DEPLOY_OPTIONS -= --no-qml
    DEPLOY_OPTIONS += --qml

    DEPLOY_OPTIONS -= --no-network
    DEPLOY_OPTIONS += --network

    DEPLOY_OPTIONS += --qmldir $${QT_DIR}qml/
}

if (!isEmpty(DESTDIR)) {
    # 如有设置目标输出路径则定向于该路径
    TARGET_OUT_DIR = $$OUT_PWD/$$DESTDIR/
}
else {
    # 判断是debug版本还是release版本
    CONFIG(debug, debug|release) {
        TARGET_OUT_DIR = $${OUT_PWD}/debug/
        DEPLOY_OPTIONS += --debug
    }
    else {
        TARGET_OUT_DIR = $${OUT_PWD}/release/
        DEPLOY_OPTIONS += --release
    }
}

# 实验性功能
!isEmpty(EXPERIMENTAL) {
    # 该功能(用于优化qmake调试输出)是否开放还需待定,因为会导致其他未知的问题。
    CONFIG = $$remove_extra_config_parameter($$CONFIG)
}

# 调试输出
!isEmpty(DEBUG_LOGGER) {
    message(TARGET_OUT_DIR: $$TARGET_OUT_DIR) # 生成文件的输出目录
    message(QMAKE_POST_LINK: $$QMAKE_POST_LINK) # 打印命令
}

win32 {
    # 拼接Qt部署程序的文件(windows平台下为windeployqt.exe)
    WIN_DEPLOY_BIN = $${QT_BIN_DIR}windeployqt.exe

    # 编译完成后执行打包命令
    QMAKE_POST_LINK += $$WIN_DEPLOY_BIN $$DEPLOY_OPTIONS $$TARGET_OUT_DIR$${TARGET}.exe

    # 扫描Qml依赖库,并在编译完成后自动复制qml依赖库到目标目录
    QMAKE_POST_LINK += $$get_copy_qml_library_cmd_line($$QT_DIR, $$QT_BIN_DIR, $$TARGET_OUT_DIR, $$RESOURCES)

    !isEmpty(DEPLOY_COMPLETE_AUTO_OPEN_EXPLORER) {
        # 打包完成后自动打开目标路径
        QMAKE_POST_LINK += && start $$TARGET_OUT_DIR
    }
}

源码地址

欢迎大家一起协作完善。https://github.com/aeagean/DeployByQmake

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值