Qt 打包发布(自定义Cmd提取依赖)


阵营横跳,有始有终。VS依靠系统平台加成,开发,调试,发布浑然天成;Qt也正是因为没有加成,摆脱了平台束缚,成就跨平台优势。阴阳相补,Qt的开发,调试,发布没有了一条龙服务,以下要说的就是发布,编译好的exe无法直接运行,需要提取依赖库,用得最多的应该就是“windeployqt”这个命令,cd的烦恼谁用谁知道,那就用bat来封装这一系列命令。

一、依赖库提取

程序编译应使用“Release”方式,否则依赖库提取的会很大。这里以Qt 5.9.9为例。

1.1 常规 windeployqt

新建一个空目录,复制编译好的exe进去
在这里插入图片描述

打开开始菜单Qt目录下的的“Qt 5.9.9 (MinGW 5.3.0 32-bit)”快捷方式
在这里插入图片描述
输入cmd指令 “F:” 切换盘符
输入cmd指令 “cd Qt.Out” 进入需要提取依赖的exe目录
输入cmd指令 “windeployqt Cmd.exe” 执行提取
在这里插入图片描述

等待结束
在这里插入图片描述
直接运行exe即可打开程序
在这里插入图片描述

1.2 编写代码封装执行 bat

原理:使用Qt复制文件,生成bat文件来执行依赖提取。首先,找到Qt的编译环境,需要从这里提取依赖,右键开始菜单Qt目录下的的“Qt 5.9.9 (MinGW 5.3.0 32-bit)”快捷方式,打开属性
在这里插入图片描述
目标的内容包含有一个bat文件路径,找到这个文件的目录,右键这个文件用记事本打开
在这里插入图片描述
其中的“set PATH…”这一行就是Qt编译环境的设置语句,自定义的bat脚本需要这一句

void MainWindow::on_btnCmd_clicked()
{
    QString windeployqt=ui->txtC->text().simplified();  //Qt编译环境,“set PATH.......”,注意字符串‘\’在Qt代码中是‘\\’
	//除了Qt编译环境文本,路径类的字符串中尽量使用char‘\\’,不要使用‘/’
    QString originFilePath=ui->txtA->text().simplified();   //编译好的exe路径
    QString exportPath=ui->txtB->text().simplified();   //导出的依赖库目录
    QString name=originFilePath.split('\\')[originFilePath.split('\\').length()-1]; //文件名,提取时使用
    QString destFilePath=exportPath+"\\"+name;  //导出的依赖库目录主程序路径
    QString batPath=QCoreApplication::applicationDirPath()+"/";     //bat批处理运行目录
    QString batFilePath=QCoreApplication::applicationDirPath()+"/打包.bat";   //bat批处理文件名称

    QDir dir;
    if(dir.mkdir(exportPath))//创建文件夹
    {

    }

    if(QFile::copy(originFilePath,destFilePath))//复制到提取目录
    {

    }

    QString bat="@echo off";
    bat.append("\r\n"+windeployqt);
    bat.append("\r\ncd /d "+exportPath);
    bat.append("\r\nwindeployqt "+name);

    QFile file(batFilePath);
    if(!file.exists()){

    }

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){

    }

    QByteArray array = bat.toUtf8();
    file.write(array, array.length());
    file.close();

    QProcess* process = new QProcess();
    process->setWorkingDirectory(batPath);
    QString commed = batFilePath;
    process->start(commed);
    process->waitForFinished();
    QMessageBox::information(this,"提示","完成");

}

二、打包成单个文件

上一步得到的是exe运行的目录,可以使用“Enigma Virtual Box”工具打包成一个exe文件。
在这里插入图片描述
其中“文件选项”中要勾选“压缩文件”,点击“打包”完成。

三、依赖提取工具下载

https://download.csdn.net/download/u012619677/88442010
在这里插入图片描述
编译环境文本的内容在1.2中有说明。光标放置哪个文本框,拖动文件或目录至窗体会自动填写路径和目录。手动填写路径和目录时,应使用可见字符‘\’,不应使用‘/’。

四、联系作者

gshuaijun@163.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值