Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe


文章目录

  • Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe
    • 1. 前言
    • 2. 基本思路
    • 3. 编译Qt项目及注意事项
      • 3.1 编译Qt项目
      • 3.2 注意事项
    • 4. 打包Qt项目
    • 5. 创建Jenkins构建任务
    • 6. 结果
    • 6. 最后

1. 前言

之前我们已经总结过使用wsl下的Jenkins来自动编译打包go程序和Java程序,接下来我们继续总结一下编译打包Qt程序。

2. 基本思路

基本思路都是类似的,将原有的分散的编译打包过程的命令配置到Jenkins任务中周期定时性或触发式调用即可,而Qt一般我们都是通过qmake编译的(也可能通过cmake编译,比如使用CLion开发Qt:https://blog.csdn.net/weixin_39510813/article/details/115482634),所以编译过程添加到Jenkins是比较简单的,找到原本Qt项目的编译命令然后添加到Jenkins编译命令即可,如果是Windows下的就使用bat命令,如果是像我这样使用wsl的则可能需要看一下之前提到的如何在wsl调用Windows下的命令,之后再通过打包方式再某个目录将生成的release程序打包成exe,这个过程可能需要提前生成inno steup的脚本,之后调用windeployqt添加依赖库,再将依赖和release文件通过inno setup打包成exe即可,至于触发方式还是使用定时触发(github和Jenkins的推送时触发需要公网对公网,我们本地安装Jenkins进行测试的话需要配置内网穿透,比较麻烦,所以暂时还是使用定时触发方式)。

综上,编译、打包、触发如下:

编译:qmake/camke命令shell或bat调用,一般使用Qt creator我们都是使用qmake;
打包:windeployqt对release程序运行添加依赖库等,inno setup等三方工具将依赖和程序以及协议和证书等同一打包exe;
触发方式:定时触发,如果有公有云的话可以直接安装相关环境到公有云,然后配置webhook进行提交代码后触发。

3. 编译Qt项目及注意事项

3.1 编译Qt项目

先在Qt creator上执行一遍,看一下编译输出来确认会执行哪些命令,然后我们将这些命令按照之前编译go和Java程序的方式放到Jenkins的编译命令那里即可,如下图所示:

12:24:14: 为项目read_id_card执行步骤 ...
12:24:14: 正在启动 "D:\Qt5.9.1\5.9.1\mingw53_32\bin\qmake.exe" D:\CProjects\read_id_card\read_id_card.pro -spec win32-g++Info: creating stash file D:\CProjects\build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release\.qmake.stash
12:24:15: 进程"D:\Qt5.9.1\5.9.1\mingw53_32\bin\qmake.exe"正常退出。
12:24:15: 正在启动 "D:\Qt5.9.1\Tools\mingw530_32\bin\mingw32-make.exe" qmake_allmingw32-make: Nothing to be done for 'qmake_all'.
12:24:16: 进程"D:\Qt5.9.1\Tools\mingw530_32\bin\mingw32-make.exe"正常退出。
12:24:16: 正在启动 "D:\Qt5.9.1\Tools\mingw530_32\bin\mingw32-make.exe"
...
12:24:22: 进程"D:\Qt5.9.1\Tools\mingw530_32\bin\mingw32-make.exe"正常退出。
12:24:22: Elapsed time: 00:08.

所以主要是以下几个命令:

qmake.exe D:\CProjects\read_id_card\read_id_card.pro -spec win32-g++
mingw32-make.exe qmake_all
mingw32-make.exe

为了模拟整个Qt creator的编译过程,我们将创建文件夹等过程也加入进来,此外,wsl执行Windows的命令对路径也有一些小要求,最终一个简单的在wsl上编译Windows下Qt项目的shell脚本如下:

cd /mnt/d/CProjects/
mkdir build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release
cd build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release
# wsl执行Windows命令注意路径加双引号
qmake.exe "D:\CProjects\read_id_card\read_id_card.pro" -spec win32-g++
mingw32-make.exe qmake_all
mingw32-make.exe

结果如下:

当然,上述脚本可以将项目名称提取成变量,将整个过程提取成函数更好一些,针对debug和release也做一下区分,这里我暂时就不做优化了。

3.2 注意事项

最后一步编译时有时会出现如下错误:

release/main.o:main.cpp:(.text+0x2e): undefined reference to `__imp__ZN12QApplicationC1ERiPPci'
...

这个是由于我安装了好几个mingw,默认Qt的mingw一般都是32位的,我的一些程序必须使用64位的mingw,所以这里调用mingw相关命令时使用错了mingw,因此如果你也出现类似问题,可以看一下你的mingw版本情况。

像我这里修改后加入到Windows的PATH之后会如下所示,需要保证使用的是Qt自带的mingw,因为一些Qt相关的库是经过其自带的mingw编译的,如果找不到就会提示上面的"undefined xxx"。因此,如果使用的不是Qt自带的mingw,要么用你使用的mingw编译一下相关的库或者Qt,要么切换一下你正在使用的mingw(更改Windows下PATH中的mingw的bin目录位置即可):

zy@LS2-R910CQQT:/mnt/d/CProjects$ mingw32-make.exe -v
GNU Make 4.1
Built for i686-w64-mingw32
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
zy@LS2-R910CQQT:/mnt/d/CProjects$ which mingw32-make.exe
/mnt/d/Qt5.9.1/Tools/mingw530_32/bin/mingw32-make.exe

4. 打包Qt项目

我这里是使用的windeployqt获取release程序的依赖,然后使用三方工具inno setup将其打包成exe即可,不清楚的可以看这里:https://blog.csdn.net/weixin_39510813/article/details/105013247

之后我们将这个过程命令化(这其中安装inno setup和创建编译的.iss的过程暂时不好自动化,还是需要按照上面的总结自己创建一个)。

cd /mnt/d/CProjects/
mkdir packReadIDCard
cd packReadIDCard
cp /mnt/d/CProjects/build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/read_id_card.exe ./
windeployqt.exe read_id_card.exe

之后将生成的部署依赖和程序通过inno setup生成打包的.iss脚本,后续我们再打包就只需要运行该脚本即可。

将inno setup的安装路径添加到PATH中,之后使用其自带的命令行命令执行生成的.iss脚本即可打包exe:

然后运行命令:

ISCC.exe packReadIDCardScript.iss

5. 创建Jenkins构建任务

创建自由风格项目:

勾选钉钉机器人:

提供git地址和用户名密码等;

定时构建:

构建-执行shell:

shell暂时就不优化了,等到实际项目中专人负责优化一下即可:

cd /mnt/d/CProjects/
mkdir build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release
cd build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release
# wsl执行Windows命令注意路径加双引号
qmake.exe "D:\CProjects\read_id_card\read_id_card.pro" -spec win32-g++
mingw32-make.exe -v
mingw32-make.exe qmake_all
mingw32-make.exe
cd /mnt/d/CProjects/
mkdir packReadIDCard
cd packReadIDCard
cp /mnt/d/CProjects/build-read_id_card-Desktop_Qt_5_9_1_MinGW_32bit-Release/release/read_id_card.exe ./
windeployqt.exe read_id_card.exe
cd ..
ISCC.exe packReadIDCardScript.iss

6. 结果

如果没问题的话钉钉会提示构建成功:

并且在read_id_card的同级目录下Output文件夹中会生成打包好的exe文件:

这个exe文件我们还可以扩展上传到公网服务器,然后开放部分文件夹直接提供ftp下载等。

6. 最后

后面应该还有一个前后端的提交、构建、测试和发布的总结,但是不确定什么时候弄,我把网站迁到阿里云之后域名国内需要备案,这个就有点烦,所以暂时就没有做个人网站升级改造,暂时又把域名关联到GitHub page了,等后续看要不要开发个公众号然后维护公有云上的微信公众号来做下测试。

Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe相关推荐

  1. python编译exe文件太大了_python编译windows下可执行的exe文件

    python编译windows下可执行的exe文件的操作流程: 1.在安装python环境的windows下,安装 pyinstaller,请在dos下执行如下命令: pip install pyin ...

  2. Qt学习之Windows下Qt应用程序打包成exe安装包

    本文介绍如何将exe可执行程序打包成exe安装包,打包完的安装包可以直接在Windows下安装,需要用到 Inno Setup 安装程序制作软件工具,工具下载完之后直接安装即可. 工具下载: 打包安装 ...

  3. linux飞秋查看共享文件,Ubuntu下的iptux和Windows下的飞秋互传文件

    1.问题 当Linux下的iptux是安装源里的版本时,存在下面的问题: Windows下的飞秋可以向Linux下的iptux发送文件,iptux接受正常 Linux下的iputx给Windows下的 ...

  4. Python 把脚本编译打包成EXE文件 —— pyinstaller 的安装和使用

    安装 pyinstaller 要把Python脚本编译打包成.exe可执行文件,需要安装 pyinstaller.exe . 打开windows控制台窗口cmd.exe,执行以下命令,Python会自 ...

  5. 使用VC2005编译真正的静态Qt程序-Qt中文论坛-夏威夷雪人

    原文地址: http://www.qtcn.org/bbs/read.php?tid=13825 作者:Qt中文论坛-夏威夷雪人:scut_ray 如何使用VC2005编译"真正" ...

  6. Pycharm下将py文件打包成exe文件

    1. 在PyCharm下安装PyInstaller 1. 首先,打开自己要发布的工程   2. 点击底部的[Terminal]打开终端,中输入命令pip install pyinstaller后回车, ...

  7. python 编译成exe黑屏_python''外星人入侵''打包成exe遇到的问题和解决办法,闪退,黑屏。...

    利用python写完"外星人入侵之后",尝试打包成exe给自己玩得方便点.然后我在网上查找各种方法.下面按顺序列出. 一:我首先安装好了pyinstaller:在cmd中输入:pi ...

  8. python3编译成exe运行_python3.x的程序如何打包成exe可执行文件

    最近有人问我,如何将编写的python打包成exe程序.使用pip install pyinstaller,安装了pyinstaller3.3.在网上找了个教程,将程序打包成了exe文件,但是在执行文 ...

  9. 【Python学习笔记(二)】使用Pyinstaller将不同路径下的py文件打包成exe可执行文件

    ** 使用Pyinstaller将不同路径下的py文件打包成exe可执行文件 ** ** 前言 在Windows环境下需要打包一个python项目成exe可执行文件,共有一个主函数BomSoftwar ...

最新文章

  1. 转自一个面试者的“提示”
  2. 与《管理幸福》一书作者Jurgen Appelo的访谈
  3. Android面试题目之(13) ListView的设计原理
  4. python怎么安装numpy库-Python NumPy库安装使用笔记
  5. nodejs在windows平台下搭建部署环境教程
  6. 编写高质量代码:改善Java的151个建议四(基本类型)21-30
  7. C++ 11 深度学习(十)原始字面量
  8. css响应式网格布局生成器_如何使用网格布局模块使用纯CSS创建响应表
  9. 上海师范大学计算机技术考研分数线,上海师范大学2019年考研复试分数线已公布...
  10. 32岁了 学python 来的及吗-32岁的程序员去了国企工作, 晒出年薪, 网友: 我没看错吧...
  11. AES攻击方法 :差分密码分析 boomerang attack飞去来器攻击
  12. python光棍节快乐_光棍节快乐的祝福语QQ【17句】
  13. 如何用php 图片合成一张图片,PHP 文字生成图片并与两张图片合成一张图片
  14. RT-thread实现USB虚拟U盘 模拟读卡器读写sd0
  15. 安卓APP的字体大小设置不受系统字体大小的影响
  16. Linux-Mysql 源码包安装初始化报错
  17. AD仿真功能描述文档
  18. iPhone系统可以降级吗?
  19. fanuc机器人DCS
  20. win10硬盘锁怎么解除_大师教你解决win10系统取消移动硬盘写保护的图文办法

热门文章

  1. 计算机历史ppt 英文儿童,第一课-计算机发展历史ppt
  2. 小米将推出新款自研芯片
  3. [FAST 2009]Cumulus:File System Backup to the Cloud
  4. 易中天讲座免费在线学习 免费下载
  5. 从C快速入门C++ (命名空间、引用、函数重载)
  6. iOS及Mac开源资料
  7. 中国省市关系+各地经纬度【Python版】
  8. SafeIterableMap
  9. 谷歌小恐龙-有网也能玩儿
  10. oscp——symfonos:3