vcpkg切换libraw版本是否需重编译?如何避免重复等待?
vcpkg切换libraw版本的缓存与耗时问题
切换回0.21.2是否需要重新编译40分钟?
不用,vcpkg默认会缓存已编译完成的包。只要你之前安装0.21.2时的编译环境(比如MSVC版本、系统架构、编译选项是Debug/Release、静态/动态链接等)没变化,切换回去的时候vcpkg会直接复用本地缓存的二进制文件,不会重新编译,几秒就能完成切换。
缓存的核心位置有两个:
- 项目或全局vcpkg的
installed目录:不同版本、架构、编译类型的包会分目录存放; - 系统级全局缓存:Windows下是
%LOCALAPPDATA%\vcpkg\archives,Linux/macOS是~/.cache/vcpkg/archives,编译好的包会以压缩包形式存在这里,跨项目也能复用。
若缓存丢失,如何避免重复耗时编译?
如果因为误删缓存、编译环境变更等原因导致缓存失效,可以通过这些方法优化:
- 开启二进制缓存:在
vcpkg-configuration.json里配置二进制缓存,甚至可以搭建远程缓存(比如公司内部存储),让不同机器或项目共享编译好的包,不用重复编译; - 固定编译环境:尽量保持工具链版本(比如不要随便升级MSVC)、编译参数一致,vcpkg会根据环境哈希判断是否复用缓存,环境变了就会触发重新编译;
- 预编译常用版本:提前把需要频繁切换的libraw版本(比如0.19.0和0.21.2)都编译好,后续切换直接调用缓存;
- 用lock文件锁定依赖:在项目目录运行
vcpkg install生成vcpkg.lock,锁定依赖版本的同时,也能提升缓存的识别复用率。
内容的提问来源于stack exchange,提问作者Stefan Monov
相关产品推荐
相关产品推荐

