• Qt打包程序


    介绍

    windeployqt.exe是qt自带的工具,用于创建应用程序发布包。简单来讲,这个工具可以自动的将某程序依赖的库、资源拷贝到其所在目录,防止程序在其他电脑上运行报找不到库的错误。

    原理

    windeployqt.exe工作原理很简单,它会到当前的环境变量PATH配置的搜索路径中,查找应用程序所需要的库和资源,拷贝到应用程序目录中。

    使用

    先从开始菜单中打开对应版本的Qt命令行终端界面,如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wJs3H6p-1663578125868)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220919142527264.png)]

    在命令行中输入:

    windeployqt.exe 应用程序完整路径
    
    • 1

    回车即可执行发布命令。注意,我们通常会将release的可执行性文件拷贝到另外一个目录中,然后将该目录作为发布目录。

    在这里插入图片描述

    在这里插入图片描述

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkk0kU1K-1663578125870)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220919143757092.png)]

    进入发布目录可以看到,目录中增加了很多依赖库和数据文件。大体上的流程只有这两步。整个发布过程看似比较简单,但是其中还是存在一些坑的。

    坑点一:未使用Qt的命令行终端执行发布命令,导致库版本拷贝错误

    关于这一点,我是看其他网友这么写的,但是还是心存疑虑的,感觉不会出问题。

    首先,我们可以看看,启动Qt命令行终端的时候,其他它的操作就是两个:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DJFxAUwQ-1663578125871)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220919145920632.png)]

    第一个关于环境变量的我们先不说。直接看第二点就是切换了目录。这个目录在哪呢?

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgtagL1V-1663578125872)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220919150048717.png)]
    就是我们Qt的安装目录。其版本对应的库和资源都在这个目录下。并且windeployqt.exe就在bin目录下。只有进入windeployqt.exe所在目录下,才可以执行命令:

    windeployqt.exe 应用程序完整路径
    
    • 1

    如果执行的windeployqt.exe版本正确,其找到的库版本应该不会出错。

    坑点二:未使用与Qt版本对应的windeployqt.exe

    发布软件时,必须使用项目开发所使用的Qt版本,并使用此版本Qt安装目录下的windeployqt.exe完成发布过程。每个Qt版本中的工具只有在此Qt版本下才能确保正常工作,混用会引入未知的风险。

    坑点三:发布时,默认文件不会覆盖

    在Qt命令行终端中多次执行发布命令,已在发布文件夹中的文件默认不会被覆盖。可以通过添加强制覆盖参数–force强制覆盖已存在的文件。建议始终添加–force参数,防止因文件未覆盖而出现问题。

    细节问题

    Qt命令行启动时有一行提示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6Lglf6H-1663578125872)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220919155955969.png)]

    意思是说,因为我们没有运行vcvarsall.bat,所以VS的环境变量没有配置好,所以不会拷贝VS相关的依赖库。vcvarsall.bat是VS的自带的配置环境变量的批处理文件。那我们就尝试运行vcvarsall.bat来配置一下VS的环境。如果没有找到

    C:\Qt\5.15.2\msvc2019_64>"D:\Program Files\VisualStudionIDE\VC\Auxiliary\Build\vcvarsall.bat" x64
    **********************************************************************
    ** Visual Studio 2019 Developer Command Prompt v16.11.17
    ** Copyright (c) 2021 Microsoft Corporation
    **********************************************************************
    [vcvarsall.bat] Environment initialized for: 'x64'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    vcvarsall.bat的目录需要自己在电脑上找到。然后我们再次执行打包命令,会发现发布目录下多了一个可执行文件:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaywR4sE-1663578125873)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220919161911199.png)]
    这个可执行性文件中有VS的依赖库,在没有安装VS的电脑上运行即可。

    打包脚本

    就是为了偷懒。。。该脚本在项目跟目录下执行,具体的也可以根据实际情况调整脚本代码,仅供参考。

    deploy_path="./HapticChipTool_Release$(date "+%m%d")"
    
    release_file_path="./build-HapticChipTester-Desktop_Qt_5_15_2_MSVC2019_64bit-Release/release/HapticChipTester.exe"
    
    deploy_file_path="${deploy_path}/HapticChipTool.exe"
    
    #创建部署文件夹
    if [ ! -e ${deploy_path} ]
    then
       mkdir ${deploy_path}
    fi
    
    #将release的可执行文件拷贝到部署目录下
    cp ${release_file_path} ${deploy_file_path}
    
    deploy_tool_path="C:\Qt\5.15.2\msvc2019_64\bin\windeployqt";
    #调用工具进行打包
    ${deploy_tool_path} --force ${deploy_file_path} 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    什么是JavaSE,写给第一次接触Java的人
    PHP入门-Window 下利用Nginx+PHP 搭建环境
    HDU 2089 不要62(数位DP,DFS写法)
    人工智能知识全面讲解:线性支持向量机
    想要精通算法和SQL的成长之路 - 至少有 K 个重复字符的最长子串
    un7.30:linux——如何在docker容器中安装MySQL?
    【splishsplash】PBD探究
    面向对象编程
    黑客技术(网络安全)自学2024
    PMP 通关之45天备考五重点
  • 原文地址:https://blog.csdn.net/zhudaokuan/article/details/126937584