🚀 从零开始:高效使用 Vcpkg 安装 Qt WebEngine(经典模式 · 缓存优化 · 性能释放)

🧩 背景简介

在使用 Vcpkg 安装 Qt 系列库时,特别是庞大的 qtwebengine 模块,编译量极大,耗时可达数十小时,若系统未优化或未启用缓存机制,还会重复编译同样的包,浪费时间与性能。

本文将从零开始介绍如何:

  1. 安装与配置 Vcpkg(经典模式)
  2. 最大化释放编译性能
  3. 启用并验证缓存机制
  4. 实现可迁移的构建环境(跨机不重编)

1️⃣ 安装 Vcpkg(经典模式)

✅ 下载 Vcpkg 源码

推荐将 Vcpkg 放在非系统盘,例如:

git clone https://github.com/microsoft/vcpkg E:\Dev\vcpkg

✅ 初始化并构建可执行文件

cd E:\Dev\vcpkg
.\bootstrap-vcpkg.bat

你会获得:

E:\Dev\vcpkg\vcpkg.exe

此时你就可以使用经典模式(非清单)的方式来安装包:

vcpkg install qtwebengine:x64-windows

不需要 vcpkg-configuration.json 文件,适合需要多个项目共用 Qt、避免重复安装的场景。


2️⃣ 设置环境变量(统一路径 & 缓存支持)

启动脚本可以参考 PowerShell 终端环境自动化配置

✅ 推荐统一使用环境变量(加入 PowerShell 启动脚本)

编辑文件(如 C:\Users\<你>\.powershell\env.ps1):

# ========== Vcpkg 环境变量 ==========
$vcpkgRoot = $env:VCPKG_ROOT
if (-not $vcpkgRoot -or -not (Test-Path "$vcpkgRoot\vcpkg.exe")) {$vcpkgRoot = "E:\Dev\vcpkg"
}# 检查是否存在 vcpkg.exe
if (Test-Path "$vcpkgRoot\vcpkg.exe") {# 设置缓存目录$vcpkgCache = "$vcpkgRoot\archives"Set-Item -Path "Env:VCPKG_ROOT" -Value $vcpkgRootSet-Item -Path "Env:VCPKG_BINARY_SOURCES" -Value "clear;files,$vcpkgCache"Write-Host "✅ VCPKG_ROOT 设置为 $vcpkgRoot"Write-Host "✅ VCPKG_BINARY_SOURCES 设置为 clear;files,$vcpkgCache"
} else {Write-Warning "⚠️ 未找到 Vcpkg 路径:$vcpkgRoot(请检查路径或修改默认值)"
}
作用:
  • clear:该命令会清除 vcpkg 当前的二进制缓存。具体来说,它会删除存储在 vcpkg 缓存目录(如 archives)中的所有预编译二进制包。这意味着下次安装时,vcpkg 会重新下载和编译所需的包。
例子:

当您设置如下环境变量时:

Set-Item -Path "Env:VCPKG_BINARY_SOURCES" -Value "clear;files,$vcpkgCache"
  • clear 会清除当前的二进制缓存。
  • files,$vcpkgCache 指定了您希望 vcpkg 使用的本地缓存路径($vcpkgCache)。
使用场景:
  • 清除缓存:当您遇到缓存问题或包无法正确安装时,使用 clear 可以帮助解决问题。
  • 保留本地缓存:您可能会清理缓存后,仍然希望从本地路径加载包。这时,files 就会指定本地缓存路径,避免每次都从网络下载。
注意:

清除缓存会导致下次安装时需要重新下载和编译,可能会稍微延长安装时间。如果您不希望清除缓存,只需去掉 clear,如:

Set-Item -Path "Env:VCPKG_BINARY_SOURCES" -Value "files,$vcpkgCache"

📦 启动 PowerShell 确认环境变量:

$env:VCPKG_BINARY_SOURCES
# 输出应为:clear;files;E:\Dev\vcpkg\archives

3️⃣ 开启性能最大化构建环境

默认 Windows 系统会限制后台构建工具(如 ninja.execl.exe)的 CPU 使用率,尤其在节能或平衡模式下,仅能发挥 20~30% 性能。

在这里插入图片描述

✅ 步骤 1:调整系统电源策略

  • 打开:设置 → 系统 → 电源和电池
  • 将电源模式设置为:最佳性能
  • 如果为笔记本,请确保已接通电源再构建

✅ 步骤 2:编译工具使用多线程(仅当手动构建)

cmake --build . --config Release -- -j12

但 Vcpkg 默认已自动启用最大并行 ninja -j N,性能会立即体现。


4️⃣ 安装 Qt WebEngine 模块

✅ 直接安装命令(经典模式):

vcpkg install qtwebengine:x64-windows

此过程将:

  • 下载源码依赖(如 Chromium、PDFium)
  • 启动 CMake 配置
  • 调用 ninja 构建 Debug / Release 双版本
  • 安装产物到 installed/x64-windowsinstalled/x64-windows/debug

📍 注意事项

  • 你可能会看到 ninja.exe 占用 80~100% CPU,这是正常现象(如果电源设置对了);

  • 构建过程中 CPU 多核、内存占用高、硬盘写入频繁,属于高强度构建流程;

  • 编译日志可查看:

    buildtrees/qtwebengine/install-x64-windows-rel-out.log
    buildtrees/qtwebengine/install-x64-windows-dbg-out.log
    

5️⃣ 缓存机制详解 & 启用验证

✅ 缓存目录结构(例):

E:\Dev\vcpkg\archives\
└── 0a\└── 0a78d8ce9245...qtwebengine_x64-windows_abcdef.zip

这些 .zip 文件就是构建成功后的二进制缓存,供未来复用。

✅ 如何确认缓存命中?

可用 --dry-run 测试是否命中缓存::

vcpkg install qtwebengine:x64-windows --dry-run

输出中若有:

Restored 1 package(s) from E:\Dev\vcpkg\archives

说明命中成功。

若没有命中,会触发重新编译。原因可能包括:

  • portfile 变动(Vcpkg 仓库更新)
  • baseline 更新(git 拉新)
  • triplet 或 feature 改变
  • 环境变量没设置正确

在这里插入图片描述


6️⃣ 跨机迁移方案(不再重新编译 Qt)

✅ 拷贝以下两个目录:

E:\Dev\vcpkg\               ← 主目录(含 installed/, ports/, buildtrees/)
E:\Dev\vcpkg\archives\      ← 缓存目录(.zip 包)

✅ 新机器恢复步骤:

# 1. 解压 vcpkg 到同路径
# 2. 设置环境变量(推荐加入 env.ps1)
# 3. 可选:git checkout <旧版本 commit> 固定 ports 内容
# 4. 启动 PowerShell 运行 vcpkg install
#    → 将自动命中缓存,无需重新编译

📌 附:如何固定版本防止被更新

cd E:\Dev\vcpkg
git log -1 --oneline
# f7b89fa3 Update qtwebengine to 6.8.3git checkout f7b89fa3
.\bootstrap-vcpkg.bat

这样你构建时使用的 Qt/WebEngine 版本不会发生变化,缓存也能正确命中。


✅ 总结

目标状态
使用经典模式安装 Qt✅ 已完成
启用缓存并集中管理✅ 缓存目录为 E:\Dev\vcpkg\archives
释放系统性能编译加速✅ 设置为“最佳性能”电源计划,已启用多线程
日志可追踪构建进度buildtrees/qtwebengine/*.log
可迁移构建环境复用✅ 打包 vcpkg 目录和缓存 zip 即可
防止版本变动触发重编✅ 固定 Vcpkg 仓库 Git 提交

是的,clear 确实会清除 vcpkg 中之前的缓存。

作用:

  • clear:该命令会清除 vcpkg 当前的二进制缓存。具体来说,它会删除存储在 vcpkg 缓存目录(如 archives)中的所有预编译二进制包。这意味着下次安装时,vcpkg 会重新下载和编译所需的包。

例子:

当您设置如下环境变量时:

Set-Item -Path "Env:VCPKG_BINARY_SOURCES" -Value "clear;files,$vcpkgCache"
  • clear 会清除当前的二进制缓存。
  • files,$vcpkgCache 指定了您希望 vcpkg 使用的本地缓存路径($vcpkgCache)。

使用场景:

  • 清除缓存:当您遇到缓存问题或包无法正确安装时,使用 clear 可以帮助解决问题。
  • 保留本地缓存:您可能会清理缓存后,仍然希望从本地路径加载包。这时,files 就会指定本地缓存路径,避免每次都从网络下载。

注意:

清除缓存会导致下次安装时需要重新下载和编译,可能会稍微延长安装时间。如果您不希望清除缓存,只需去掉 clear,如:

Set-Item -Path "Env:VCPKG_BINARY_SOURCES" -Value "files,$vcpkgCache"

总结:

  • clear 会清除缓存,是一个有用的选项来解决缓存相关的问题,但也会导致需要重新下载和编译依赖包。
  • 使用 files,$vcpkgCache 使 vcpkg 从指定的本地路径加载缓存。

如果您有其他问题或需要进一步解释,请随时告诉我!

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA产品

FPGA产品 文章目录 FPGA产品1. Xilinx公司FPGA产品2. Altera公司FPGA产品3. FPGA产品的工业等级简介4. FPGA产品的速度等级简介总结 1. Xilinx公司FPGA产品 Xilinx公司是FPGA芯片的发明者&#xff0c;因此是一家骨灰级的老牌FPGA公司&#xff0c;同时也是目前最大的可编程逻辑…

205-06-26 Python深度学习1——安装Anaconda与PyTorch库(Win11+WSL2+Ubuntu24.04版)

文章目录 1 安装 wsl1.1 开启 Windows 支持1.2 安装 wsl1.3 移动 wsl 至其他盘1.4 其他事项 2 安装 Anaconda3 安装 Python 环境3.1 创建 Conda 环境3.2 安装 Pytorch 库&#xff08;gpu&#xff09; 4 安装 Pycharm4.1 Toolbox App 安装4.2 安装 Pycharm4.3 配置 Pycharm 5 测…

Redis 数据迁移同步:应对大 Key 同步挑战

在企业级的数据同步和迁移场景中&#xff0c;Redis 凭借高性能和灵活的数据结构&#xff0c;常被用于缓存和高频读写场景。随着业务数据的积累&#xff0c;Redis 中不可避免会出现包含大量元素的“大 Key”&#xff0c;如包含几十万条数据的 List、Set 或 Hash 类型。在进行全量…

视频关键帧提取

&#x1f39e;️ 视频关键帧提取与特征分析指南 &#x1f4cc; 抽帧数量建议 视频时长推荐抽帧数原因短视频&#xff08;≤15秒&#xff09;3&#xff5e;5 帧覆盖不同场景即可中长视频&#xff08;1&#xff5e;3分钟&#xff09;5&#xff5e;10 帧内容跨度大长视频&#xf…

协作机器人优化自动化工作流程,提升工作效率

无损检测(NDT)是一种检查方法&#xff0c;用于识别材料中的裂纹或缺陷&#xff0c;或者在不损坏材料的情况下确定材料的元素组成。Olympus拥有多种NDT设备&#xff0c;这些设备具有多种多样的测量功能&#xff0c;允许最终用户对各种行业中使用的金属、塑料、陶瓷和复合材料进行…

复用对象Aspose.Words 中 DocumentBuilder 的状态管理解析

doc manager.LoadDocument(filePath) builder.Document doc 是不是builder就自动清空重建了,不需要清理builder Aspose.Words 中 DocumentBuilder 的状态管理解析 在您的代码中&#xff0c;builder.Document doc 这行代码不会自动清空或重建DocumentBuilder的状态。Docume…

(LeetCode 面试经典 150 题 ) 134. 加油站 (贪心)

题目&#xff1a;134. 加油站 思路&#xff1a;贪心&#xff0c;时间复杂度0(n)。 当前点i来到下一个点i1,那么油的变化量是gas[i]-cost[i]。 先统计遍历完所有点后&#xff0c;油的变化量sum。如果sum<0&#xff0c;说明不可能绕行一周&#xff1b;sum>0&#xff0c;说…

Java 线程池总结

一、写在前面 参考阿里开发规约,创建线程池一般用ThreadPoolExecutor 在高并发程序中&#xff0c;频繁创建与销毁线程是一种极其低效且不可控的行为。为了解决这个问题&#xff0c;Java 提供了线程池&#xff08;ThreadPoolExecutor&#xff09;这一强大的并发框架。它不仅提…

【3.3】Pod详解——容器探针部署第一个pod

文章目录 容器探针小知识-控制平面Pod实战声明式模型&命令模式 部署第一个pod编写pod清单文件kubectl命令将清单文件post到api-server验证pod删除pod 容器探针 上面已经讲到容器状态,那么这些容器的状态是怎么检测到的呢?实际上在pod中有三种探针&#xff0c;存活探针(li…

Insar 相位展开真实的数据集的生成与下载(随机矩阵放大,zernike 仿真包裹相位)

1.真实的数据集下载: Delta-X: UAVSAR L1B Interferometric Products, MRD, Louisiana, 2021 | NASA Earthdata 注意下载的时候需要注册登录一下哦 2. 适用于 深度学习训练的数据集 通过网盘分享的文件:InSAR-DLPU.rar 链接: https://pan.baidu.com/s/1CRWAuNYwCHP_iqCeIhf…

C++ 多线程深度解析:掌握并行编程的艺术与实践

在现代软件开发中&#xff0c;多线程&#xff08;multithreading&#xff09;已不再是可选项&#xff0c;而是提升应用程序性能、响应速度和资源利用率的核心技术。随着多核处理器的普及&#xff0c;如何让代码有效地利用这些硬件资源&#xff0c;成为每个 C 开发者必须掌握的技…

(线性代数)矩阵的奇异值Singular Value

矩阵的奇异值是矩阵分析中一个非常重要的概念&#xff0c;尤其是在数值线性代数、数据降维&#xff08;如PCA&#xff09;、图像处理等领域有着广泛应用。奇异值分解&#xff08;SVD, Singular Value Decomposition&#xff09;是一种强大的工具&#xff0c;可以将任意形状的矩…

数据结构复习4

第四章 串 一些面试题 12. 介绍一下KMP算法。★★★ KMP算法是一种高效的字符串匹配算法&#xff0c;用于在一个文本串中查找一个模式串的出现位置。KMP算法通过利用模式串自身的信息&#xff0c;在匹配过程中避免不必要的回溯&#xff0c;从而提高匹配效率。 KMP算法的核心思…

【八股消消乐】消息队列优化—消息有序

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…

2D写实交互数字人如何重塑服务体验?

在数字化浪潮席卷全球的当下&#xff0c;人机交互模式正经历着前所未有的变革。从早期的文本命令行界面&#xff0c;到图形用户界面&#xff08;GUI&#xff09;的普及&#xff0c;再到如今语音交互、手势识别等多模态交互技术的兴起&#xff0c;我们与机器之间的沟通方式愈发自…

CI/CD GitHub Actions配置流程

腾讯云服务器宝塔FinalShellgithup 1.在云服务器上创建SSH秘钥对&#xff0c;下载秘钥到本地 2.在服务器中绑定秘钥对&#xff08;绑定后&#xff0c;服务器不能将不允许密码登录&#xff09;绑定前先关机服务器&#xff0c;绑定后再开启服务器 3.FinalShell改为公钥登录&am…

液态交互效果网页开发--源自鸿蒙5以及iOS26的灵感

首先先来看看最终展示效果 当鼠标靠近“开始探索”的按钮的时候&#xff0c;按钮放大并有微弱光效 鼠标靠近之前会给视窗添加一层接近背景的朦胧感&#xff0c;当鼠标放在视窗上朦胧感消失 技术不复杂&#xff0c;这个网页主要是使用了以下关键技术&#xff1a; HTML5 语义化标…

PYTHON从入门到实践9-类和实例

# 【1】面向对象编程 class Student(object):# 可以帮属性值绑定到对象上&#xff0c;self相当于JAVA的thisdef __init__(self, name, age):self.name nameself.age agedef speak(self):print(self.name, 说&#xff1a;老师好)if __name__ __main__:new_student1 Student(…

matplotlib 绘制极坐标图

1、功能介绍&#xff1a; 使用了 matplotlib 库来创建一个极坐标图 2、代码部分&#xff1a; import matplotlib.pyplot as plt import numpy as np# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 选择黑体字体&#xff0c;支持中文 plt.rcParams[axes.unicode…

Dask心得与笔记【2】

文章目录 计算参考文献 计算 数组切片如下 import numpy as np import dask.array as dadata np.arange(1000).reshape(10, 100) a da.from_array(data, chunks(5, 20)) print(a[:,0:3])切片结果是前3列 dask.array<getitem, shape(10, 3), dtypeint64, chunksize(5, 3…