Qt6.5 LTS Windows使用VS2019编译全过程【包含静态编译】

news2024/9/20 18:37:08

Qt6.5 LTS Windows使用VS2019编译

  • 目的
  • 编译主机环境
  • 编译依赖项
  • 方式1、 使用自定义.bat脚本编译
    • 编写脚本编译
    • 使用示例
  • 方式2、使用官方configue脚本进行编译

目的

鉴于之前一直使用的是Qt5,现在Qt6已经出到Qt6.6了,弄个Qt6尝尝鲜吧,但是从Qt5.15后不再提供安装包了,所以需要自己编译或者在线安装, 这里我们选择自己静态编译Qt6.5 LTS长期支持版本

编译主机环境

系统:Win11 家庭版
处理器:12th Gen Intel® Core™ i5-12400F 2.50 GHz
内存:16.0 GB

编译依赖项

1.cmake(>=3.16; >3.18.4 若需要使用 Ninja;>=3.19 若需要编译WebEngine; >=3.21.1若静态编译Qt6.2+)
2.C++支持:C++17
3.Ninja
4.Perl(>=5.14, optional for Qt >= 6.5)
5.Python(>=2.6.x;>=3.6.x, html5lib等,若需要编译WebEngine)
6.Node.js (若需要编译WebEngine)
7.系统编译器: Visual Studio 2022 或 Visual Studio 2019(最低要求), MinGW 11.2

补充说明:静态编译Qt6.2以上版本,cmake版本必须大于3.21.1, VS版本必须最低要求是VS2019
为了防止环境污染,可不把以上安装的工具声明到系统环境变量, 而是声明在当前执行的终端下:

set PATH=D:\program\python3.8;D:\program\cmake-3.21.2\bin\;D:\program\Ninja;D:\program\Perl-5.32.1.1\bin\;%PATH%

方式1、 使用自定义.bat脚本编译

编写脚本编译

(1)MD编译:下载Qt6.5.1源码,解压,新建脚本build_vs2019_static_md_release.bat如下

@echo off
set "BUILD_TYPE=release"
set "DIR=msvc2019_x64_static_md"
set "INSTALL_DIR=%DIR%_%BUILD_TYPE%"
set "SLN_DIR=%INSTALL_DIR%_sln"
set "SRC_DIR=."
call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
cmake -S %SRC_DIR% -B %SLN_DIR% -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
    -DQT_BUILD_TESTS=FALSE -DQT_BUILD_EXAMPLES=FALSE -DCMAKE_MAKE_PROGRAM=ninja.exe -G "Ninja"
cmake --build %SLN_DIR% --config %BUILD_TYPE% --parallel
cmake --install %SLN_DIR% --config %BUILD_TYPE% --prefix=%INSTALL_DIR%

补充说明:要生成debug版本静态库,修改set “BUILD_TYPE=debug”,如果是系统是32位系统,则修改call “D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat”,此句作用是把vc编译器相关的环境变量加载进来

终端下执行脚本,在N秒后编译完成在目录下会生成编译结果文件:
在这里插入图片描述
库文件目录:
在这里插入图片描述
如果编译的是debug版本, 这里的库文件都会带一个d,如Qt6Cored.lib

(2)MT版本编译(本篇幅着重MD静态编译版本,MT编译按照如下修改进行编译):
打开源码目录 qtbase\mkspecs\common\msvc-desktop.conf
将 QMAKE_CFLAGS_XXXXXXX 中的MD 、MDd 替换为MT 、MTd
在这里插入图片描述
这里为了区分目录修改:set “DIR=msvc2019_x64_static_mt”。
编译过程会自动侦测依赖项去编译,找不到依赖项的如:QtPdf依赖python的html5lib, 如果没有安装,此模块将不会编译支持,WebEngine依赖Node.js。本教程只做部分模块支持编译, 更多的模块支持需要把相关依赖项准备好后进行编译。

使用示例

使用qtcreator新建一个gui的cmake工程,运行后结果如下:
在这里插入图片描述

使用静态编译的程序不需要依赖其他动态库, 静态编译release版的空白GUI项目,执行文件大概15M左右
在这里插入图片描述
如果使用工具对exe进行压缩,可以缩小一半左右到7M左右
UPX exe压缩工具:https://github.com/upx/upx/releases

方式2、使用官方configue脚本进行编译

采用官方提供的脚本编译,那么跟Qt5时代一样,直接执行configure文件
需要注意的一点是最好是在vs的提供的终端下执行,如下:
在这里插入图片描述

  1. 静态库编译
    …\configure -static -prefix D:\Qt6_msvc64\ -debug-and-release -opensource
  2. 动态库编译
    …\configure -prefix D:\Qt6_msvc64\ -debug-and-release -opensource
  3. cmake --build . --parallel
  4. cmake --install .

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某中厂面试题分享(附详细答案解析)

前言: 本篇文章主要记录上周某中厂面试题的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 文章目…

【性能工程】性能比较:REST vs gRPC vs 异步通信

微服务之间的通信方式对微服务架构内的各种软件质量因素有重大影响(有关微服务网络内通信的关键作用的更多信息)。沟通方式会影响软件的性能和效率等功能性需求,以及可变性、可扩展性和可维护性等非功能性需求。因此,有必要考虑不…

Element-Plus select选择器-下拉组件错位bug(有高度滚动时)

1. bug重现 由于项目不便展示,因此在官网复现bug https://element-plus.org/zh-CN/component/select.html#基础用法 2. 调试 源码调试时发现下拉菜单是直接放在body 元素里,这时候希望它不要直接放在body里, 查阅文档看到这两个属性&#x…

直线模组怎样保养才合理?

直线模组简单来说就是自动领域中做直线来回往返运动的传动部件,被广泛应用于自动化领域市场当中,可实现二轴、三轴、龙门等多轴搭建的形式,也可用于水平使用、垂直移载使用,能满足自动化领域中大多数的用户。 至于直线模组的保养&…

基于Java+控制台+Mysql实现图书管理系统

基于Java控制台Mysql实现图书管理系统 一、系统介绍二、功能展示1.主页2.添加图书3.图书列表4.根据图书名称号查询图书信息5.根据编号删除图书信息6.根据编号编辑图书信息7.退出系统 三、数据库四、其它1.其他系统实现2.获取源码 一、系统介绍 使用控制台Mysql完成一个图书管理…

实现使用语音控制myCobot机械臂运动

基于语音识别技术的机器人手臂控制智能化尝试 介绍: 在电影《钢铁侠》中,我们看到托尼斯塔克在建造设备时与人工智能贾维斯交流。托尼向贾维斯描述了他需要的零件,贾维斯控制机械臂协助托尼完成任务。随着当今技术的发展,这种实现…

Redis内存策略

Redis内存回收 Redis之所以性能强&#xff0c;最主要的原因就是基于内存操作。然而单节点的Redis其内存大小不宜过大&#xff0c;否则会影响持久化或主从同步性能。 可以通过修改配置文件来设置Redis的最大内存&#xff1a; # 格式&#xff1a; # maxmemory <bytes> #…

[PyTorch][chapter 44][时间序列表示方法2]

前言 bag of words 技术里面除了上面我们讲的&#xff0c;还包括 word2Vec TF-IDF,Glove, co-occurrence matrix 等技术 论文总览 1 Abstract: 摘要 2 Introduction: 前人工作&#xff0c;本文目标 3 Model Architectures: LSA LDA 4 New Log-Linear model 5 Result…

STM32面试知识点总结分析

一、STM32F1和F4的区别&#xff1f; 内核不同&#xff1a;F1是Cortex-M3内核&#xff0c;F4是Cortex-M4内核&#xff1b; 主频不同&#xff1a;F1主频72MHz&#xff0c;F4主频168MHz&#xff1b; 浮点运算&#xff1a;F1无浮点运算单位&#xff0c;F4有&#xff1b; 功能性…

【推荐】win 安装 rust 1.70

目录 一、下载二、安装先决条件MinGW三、安装Rust四、配置国内镜像五、检查是否安装成功五、参考文章 一、下载 官网地址&#xff1a;https://www.rust-lang.org/zh-CN/ 二、安装先决条件MinGW win 安装 C运行环境 - MinGW 三、安装Rust 3.1首先设置安装路径和环境变量 配…

容器常用操作命令概述

容器镜像就可以说是一个“样板间”&#xff0c;把运行进程所需要的文件系统、依赖库、环境变量、启动参数等所有信息打包整合到了一起。之后镜像文件无论放在哪里&#xff0c;操作系统都能根据这个“样板间”快速重建容器&#xff0c;应用程序看到的就会是一致的运行环境了。 …

EMC学习笔记(十四)射频PCB的EMC设计(一)

射频PCB的EMC设计&#xff08;一&#xff09; 1.板材1.1 普通板材1.2 射频专用板材 2.隔离与屏蔽2.1 隔离2.2 器件布局2.3 敏感电路和强辐射电路2.4 屏蔽材料和方法2.5 屏蔽腔的尺寸 近十年来&#xff0c;移动通信飞速发展&#xff0c;在移动通信设备的设计、测试、安装和操作维…

你有几种实现点击锁定屏慕,输入密码解锁的效果的思路?

文章目录 点击锁定&#xff0c;密码解锁1 需求解析2 思路2.1输入密码时回显2.1.1 利用prompt的输入值来判断 2.2 输入密码时不回显2.2.1实现思路 点击锁定&#xff0c;密码解锁 1 需求解析 点击指定的按钮&#xff0c;当前的屏幕变为空白&#xff0c; 弹出对话框&#xff0c;当…

ChatGPT付费创作系统V2.0.8独立版 +WEB端+ H5端 + 小程序端+新增PC端绘画

ChatGPT付费创作系统V2.0.8提供单独的升级包&#xff0c;升级前先更新至2.0.7版本&#xff0c;再上传升级包替换&#xff0c;同是导入升级包数据库。ChatGPT2.0.8独立版核心功能增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;后台一些小细节的优化…

电脑c盘哪些文件可以删除?这4种文件可以删!

我的电脑使用了快两年了&#xff0c;现在经常很卡顿&#xff0c;不知道是不是因为电脑c盘空间快满了导致的。电脑c盘哪些文件可以删除呢&#xff1f;请大家帮我看看&#xff01; 电脑的c盘一般会存储很多的临时文件和系统的文件。然而这些文件并不是都有用的。有些文件我们可以…

[golang 微服务] 9.go-micro + gorm实现商品微服务的分页查询

一.引入 上一节讲解 go-micro的负载均衡操作&#xff0c;go Web框(Gin,Beego)调用go-micro微服务等技术&#xff0c;这一节来看看 go-micro gorm实现 商品微服务的 分页查询操作,go-micro微服务中使用GORM和go web框架gin、beego中使用 GORM都是一样的 二.创建goodsinfo服务端…

git学习使用技巧

目录 关于版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 Git 是什么 直接记录快照&#xff0c;而非差异比较 近乎所有操作都是本地执行 Git 保证完整性 Git 一般只添加数据 三种状态 起步 - 初次运行 Git 前的配置 初次运行 Git 前的配置 用户…

2023年7月1日【青书学堂】考试 统计学(高起专)

2023年7月1日【青书学堂】考试 统计学(高起专) 注意:答案仅供参考 成绩:84.34 分 第1题 单选题 下列哪两个变量之间的相关程度高 ( ) A: 商品销售额和商品销售量的相关系数是0.9 B: 商品销售额与商业利润率的相关系数是0.84 C: 平均流通费用率与商业利润率的相关系数是-0…

ACL2023 | Multi-CLS BERT:传统集成的有效替代方案

进NLP群—>加入NLP交流群 在本文中&#xff0c;介绍了 Multi-CLS BERT&#xff0c;这是传统集成方法的有效替代方案。 这种基于 CLS 的预测任务的新颖方法旨在提高准确性&#xff0c;同时最大限度地减少计算和内存需求。 通过利用具有不同参数化和目标的多个 CLS token&…

数据结构-查找

数据结构-查找 1 知识框架2 顺序查找和折半查找2.1 顺序查找2.2折半查找2.3 分块查找 3 树型查找3.1 二叉排序树3.2 平衡二叉树3.3 B树和B树3.3.1 B树3.3.2 B树 4 散列表4.1 构造方法4.2 处理冲突的办法4.3性能分析 1 知识框架 2 顺序查找和折半查找 2.1 顺序查找 1.一般线性…