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 应用程序完整路径

回车即可执行发布命令。注意,我们通常会将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 应用程序完整路径

如果执行的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'

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值