news 2026/8/7 16:21:45

告别C++依赖地狱:vcpkg三大狠招实现200%开发效率提升

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别C++依赖地狱:vcpkg三大狠招实现200%开发效率提升

1. 项目概述:从“依赖地狱”到高效开发的破局之路

如果你是一名C++开发者,尤其是经历过跨平台项目或者需要集成多个第三方库的“老鸟”,那么“依赖地狱”这个词对你来说绝对不陌生。它就像一场无声的噩梦:为了编译一个项目,你需要手动下载A库,结果发现A库依赖B库的特定版本,而B库又需要C库的头文件路径正确,更别提Windows、Linux、macOS上截然不同的构建工具链和库文件格式了。光是配置环境、解决链接错误就能耗掉一整天,真正的编码时间所剩无几。这正是标题中“依赖地狱”所指的核心痛点——依赖管理混乱、环境配置复杂、跨平台一致性差,严重拖慢了开发节奏。

而“vcpkg”的出现,正是微软为C++社区开出的一剂“良药”。它本质上是一个跨平台的C++库管理器,你可以把它想象成Python的pip、Node.js的npm,但专门为C++而生。它的核心价值在于,通过一个简单的命令行工具和一个声明式的配置文件(vcpkg.json),自动化地处理库的下载、编译、安装以及头文件、库文件的路径配置。标题中提到的“3大狠招”,并非指三个具体的命令行参数,而是指一套组合拳式的方法论和实践策略,旨在将vcpkg从一个“能用”的工具,提升为驱动团队开发效率的核心引擎,从而实现“效率提升200%”的质变。这个提升并非空穴来风,它来自于编译等待时间的减少、环境问题排查成本的归零、以及团队协作流畅度的飞跃。

这篇文章,就是基于我多年在大型C++项目中摸爬滚打的经验,为你拆解这“3大狠招”的具体内涵和落地步骤。无论你是正在被依赖问题困扰的独立开发者,还是希望规范团队技术栈的技术负责人,接下来的内容都将提供一条清晰的路径,帮助你彻底告别手动管理依赖的原始时代。

2. 第一狠招:建立清晰、版本化的依赖清单与工作流

依赖管理的混乱,往往始于“随意”。今天张三从官网下载了openssl-1.1.1t,明天李四用包管理器安装了openssl-3.0.8,后天构建服务器上还是1.1.0。结果就是“在我机器上是好的”成为经典悲剧。第一招的核心,就是将依赖管理从“隐式”和“手动”变为“显式”和“自动化”

2.1 从vcpkg installvcpkg.json:声明式依赖管理

vcpkg早期版本主要使用命令行安装,如vcpkg install openssl:x64-windows。这种方式对于探索和快速试用是好的,但对于项目而言是不可靠的。真正的“狠招”是强制使用清单模式

具体操作:在你的项目根目录(或解决方案同级目录)创建或初始化一个vcpkg.json文件。

# 在项目目录下执行 vcpkg new --application

这个命令会生成一个最基础的vcpkg.json文件。你需要手动编辑它,明确声明所有依赖。

一个规范的vcpkg.json示例:

{ "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "name": "my-awesome-app", "version": "1.0.0", "dependencies": [ { "name": "fmt", "version>=": "9.0.0" }, { "name": "spdlog", "version>=": "1.11.0", "features": ["fmt"] }, { "name": "openssl", "version>=": "3.0.0" }, "nlohmann-json" ], "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc" }

为什么这么做以及注意事项:

  1. 版本锁定builtin-baseline是关键。它指向vcpkg官方仓库的一个特定提交哈希,相当于锁定了整个依赖生态在某个时间点的快照。这确保了无论何时何地(你的电脑、同事的电脑、CI服务器),只要基于这个基线,获取的库版本都是完全一致的,彻底解决了“版本漂移”问题。
  2. 依赖关系透明化:文件清晰地列出了项目所有外部依赖。新成员加入项目,一眼就知道需要什么。spdlog声明了"features": ["fmt"],表示需要启用集成fmt库的特性,vcpkg会自动处理这种内部依赖。
  3. 可重复的构建:结合vcpkg.jsonbuiltin-baseline,只要配合版本控制(如Git),项目的构建环境就是完全可复现的。这是现代软件工程的基础要求。
  4. “版本>=”的智慧:这里使用了version>=而不是固定的version。这是一种平衡策略。固定版本(如"version": "9.1.0")最安全,但可能错过重要的安全更新和Bug修复。version>=在锁定基线的同时,允许在基线之后、满足最低版本的前提下,自动获取较新的版本,兼顾了稳定性和更新便利。对于对稳定性要求极高的生产环境,可以考虑使用overrides字段来精确锁定某个包的版本。

实操心得builtin-baseline的哈希值可以通过在vcpkg仓库目录下执行git rev-parse HEAD获取。建议在项目初始设置时确定一个基线,并定期(如每季度)评估更新。更新基线后,务必在团队内同步并在CI上充分测试。

2.2 集成到构建系统:CMake的完美搭档

仅仅有清单文件还不够,必须让构建系统(通常是CMake)能够自动找到vcpkg安装的库。这才是打通任督二脉的关键。

经典集成方式(CMake):

  1. 命令行集成(推荐用于本地开发): 在CMake配置命令中直接指定工具链文件。

    # 假设vcpkg安装在 D:/dev/vcpkg cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=D:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake

    CMake会读取vcpkg.json,自动安装缺失的依赖,并设置好所有的include_directorieslink_libraries路径。

  2. CMakePresets集成(现代、跨团队标准): 这是更优雅的方式。在项目根目录创建CMakePresets.json文件。

    { "version": 3, "configurePresets": [ { "name": "vcpkg-windows", "generator": "Visual Studio 17 2022", "architecture": "x64", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "D:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake" }, "environment": { "VCPKG_ROOT": "D:/dev/vcpkg" } }, { "name": "vcpkg-linux", "generator": "Unix Makefiles", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "/home/user/vcpkg/scripts/buildsystems/vcpkg.cmake" } } ] }

    之后,开发者只需执行cmake --preset=vcpkg-windows,所有复杂的路径配置都隐藏了。Visual Studio 2022和CLion等IDE都原生支持CMake Presets,可以直接选择预设进行配置和构建,体验无缝。

为什么必须集成?手动将vcpkg的installed目录添加到编译器搜索路径是一种脆弱的方式。通过工具链文件集成,CMake的find_package命令会直接与vcpkg的包数据库对话,确保找到的是正确版本、正确架构(x86/x64)的库。它还能正确处理动态库/静态库的选择、调试版/发布版的不同文件。

踩坑记录:曾经遇到一个棘手问题,项目在Windows上链接失败,报“找不到符号”。排查半天,发现是因为手动添加的库路径指向了x86-windows目录,而项目是x64的。使用工具链文件集成后,这类低级错误再也没出现过。vcpkg为每个不同的 triplet(如x64-windows,x64-windows-static,x64-linux)维护独立的安装目录,工具链文件能自动识别当前构建目标并选择正确的路径。

3. 第二狠招:驾驭定制化编译与私有仓库

官方仓库的包虽多,但总有不能满足需求的时候:可能需要特定的编译选项、使用内部开发的私有库,或者官方包的版本落后。第二招就是扩展vcpkg的能力边界,让它为你量身定制

3.1 使用Overlay Ports:定制第三方库的编译

Overlay(覆盖)是vcpkg一个强大特性。它允许你在不修改官方vcpkg仓库的前提下,提供自己的“端口”(port)定义,或者覆盖已有端口的定义。

应用场景:

  1. 为库启用非默认特性:比如,你需要curl库支持openssl而不是默认的winssl
  2. 应用关键补丁:官方库的某个版本有Bug,你有一个修复补丁,在等待上游合并前需要先用起来。
  3. 使用特定版本:官方仓库已升级到新版本,但你的项目暂时需要锁定在某个旧版本。

如何操作?

  1. 创建Overlay目录:在项目旁建立一个目录,如./vcpkg-overlays

  2. 创建自定义端口:以定制curl为例。在./vcpkg-overlays下创建子目录curl,里面至少需要两个文件:

    • portfile.cmake: 定义如何构建安装这个库。通常可以拷贝官方端口文件再修改。
    • vcpkg.json: 描述这个端口(库)的元数据。

    示例:./vcpkg-overlays/curl/vcpkg.json

    { "name": "curl", "version": "7.86.0", "description": "A library for transferring data with URLs", "dependencies": [ {"name": "openssl", "default-features": false} ], "features": { "ssl": { "description": "Enable SSL/TLS support with OpenSSL", "dependencies": ["openssl"] } }, "default-features": ["ssl"] }

    示例:./vcpkg-overlays/curl/portfile.cmake(关键部分)

    vcpkg_from_github(...) # 下载源码 vcpkg_cmake_configure( SOURCE_PATH "${SOURCE_PATH}" OPTIONS -DBUILD_TESTING=OFF -DCMAKE_USE_OPENSSL=ON # 关键:强制使用OpenSSL -DCMAKE_USE_WINSSL=OFF ) vcpkg_cmake_install() vcpkg_copy_pdbs()
  3. 在项目中引用Overlay:在CMake配置时,通过VCPKG_OVERLAY_PORTS变量指定你的覆盖目录。

    cmake -B build -S . \ -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake \ -DVCPKG_OVERLAY_PORTS=/path/to/your/vcpkg-overlays

    或者在CMakePresets.jsoncacheVariables中添加这个变量。

这样做的好处:你的项目定制与官方vcpkg仓库完全解耦。官方仓库可以自由更新,你的定制不会丢失,也易于在团队内共享(只需将vcpkg-overlays目录放入版本控制)。

3.2 建立私有注册表:管理内部依赖库

对于公司内部的通用工具库、组件库,使用vcpkg私有注册表是比Overlay更系统化的方案。注册表是一个包含多个端口定义的仓库(Git仓库最常见)。

搭建步骤:

  1. 创建注册表仓库:新建一个Git仓库,结构如下:
    my-company-registry/ ├── ports/ │ ├── mylib/ │ │ ├── portfile.cmake │ │ └── vcpkg.json │ └── anotherlib/ │ ├── portfile.cmake │ └── vcpkg.json └── versions/ ├── baseline.json └── mylib/ └── version.json
    versions目录用于管理包的版本信息,是实现版本控制的关键。
  2. 配置项目使用私有注册表:在项目的vcpkg-configuration.json文件中声明(该文件通常与vcpkg.json同级)。
    { "default-registry": { "kind": "git", "repository": "https://github.com/microsoft/vcpkg", "baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc" }, "registries": [ { "kind": "git", "repository": "https://git.mycompany.com/tools/vcpkg-registry.git", "baseline": "main", "packages": ["mylib", "anotherlib"] } ] }
    这个配置告诉vcpkg:对于mylibanotherlib这两个包,去我的私有仓库找;其他所有包,还是去官方仓库找。

为什么这是“狠招”?它实现了企业内部依赖的中央化、版本化、自动化管理。开发者只需在vcpkg.json里写下"mylib",剩下的下载、编译、链接全部自动完成。版本升级只需在私有注册表中更新versions信息,所有引用该库的项目在下次更新依赖时即可获取新版本,极大简化了内部库的推广和升级流程。

注意事项:私有注册表中的portfile.cmake需要精心编写,确保其构建逻辑健壮,尤其是在Windows、Linux等多平台上。建议先参考官方端口的写法。初期可以先用Overlay模式快速验证库的构建脚本,成熟后再迁移到私有注册表。

4. 第三狠招:优化二进制缓存与CI/CD集成

当项目依赖几十个库时,从头编译(尤其是Boost、Qt这类大型库)将是时间杀手。第三招聚焦于加速,通过共享二进制成果,让团队新成员和CI服务器免于漫长的编译等待。

4.1 利用二进制缓存:避免重复编译

vcpkg支持二进制缓存。其原理是:将编译好的库的二进制包(包括头文件、库文件、CMake配置等)上传到一个共享存储位置,其他机器在安装相同配置的库时,直接下载使用,跳过编译。

主流缓存后端:

  1. 文件共享(最简单):使用网络共享文件夹或Samba目录。

    # 设置环境变量 set VCPKG_BINARY_SOURCES="clear;files,D:\vcpkg-binary-cache,readwrite" # 或Linux/macOS export VCPKG_BINARY_SOURCES="clear;files,/mnt/nas/vcpkg-cache,readwrite"

    团队每个成员和CI服务器都指向这个共享路径。第一个编译的人会上传二进制包,后面的人直接下载。

  2. NuGet(适合Windows生态):将二进制包发布到内部的NuGet Feed。

    set VCPKG_BINARY_SOURCES="clear;nuget,https://my.pkgs.visualstudio.com/_packaging/MyFeed/nuget/v3/index.json,readwrite"

    这种方式更规范,支持版本管理和权限控制,适合大型企业。

  3. GitHub Packages / Azure Artifacts:云原生的方案,与现有的DevOps流程集成度高。

配置与使用:二进制缓存的配置非常灵活。你可以创建一个vcpkg-configuration.json文件来永久化配置:

{ "default-registry": { ... }, "registries": [ ... ], "binary-sources": [ "files,/mnt/team-cache,readwrite", "nuget,https://my.feed,read" ] }

vcpkg会按顺序查找缓存源。例如,上述配置会先查文件共享,如果没有,再去NuGet Feed查找(只读),如果还没有,才会本地编译,编译后上传到文件共享。

效果对比:一个包含Boost、OpenCV、Qt的中型项目,首次全量编译可能需要数小时。启用团队共享的二进制缓存后,新成员或CI服务器的首次环境搭建时间可以缩短到几分钟(仅下载和解压),这就是效率提升200%的重要来源之一。

4.2 无缝集成CI/CD流水线

持续集成/持续部署是现代开发的标配。vcpkg必须能无缝融入CI流程。

核心原则:在CI中复用二进制缓存。

  1. CI作为二进制缓存的提供者:在CI流水线中,为每个重要的配置组合(如x64-windows,x64-linux-release)编译依赖,并将生成的二进制包上传到团队共享缓存(如NuGet Feed)。这样,开发者的本地缓存也来自于CI产出的、经过验证的二进制包,确保了环境一致性。
  2. CI作为二进制缓存的使用者:CI任务本身也应配置为优先从缓存下载依赖。这能极大缩短CI的运行时间,降低计算资源消耗。

GitLab CI/CD 示例片段:

.vcpkg_template: &vcpkg_setup before_script: - export VCPKG_ROOT="${CI_PROJECT_DIR}/vcpkg" - export VCPKG_BINARY_SOURCES="clear;nuget,${NUGET_FEED_URL},readwrite" - if [ ! -d "$VCPKG_ROOT" ]; then git clone https://github.com/microsoft/vcpkg.git $VCPKG_ROOT; fi - cd $VCPKG_ROOT && git pull && ./bootstrap-vcpkg.sh build-windows: stage: build script: - *vcpkg_setup - cmake -B build -S "$CI_PROJECT_DIR" -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" - cmake --build build --config Release artifacts: paths: - build/*.exe - build/*.dll

关键点:

  • 将vcpkg克隆和引导脚本作为CI任务的一部分,确保使用统一版本的vcpkg工具。
  • 通过VCPKG_BINARY_SOURCES环境变量指向内部NuGet源,实现二进制复用。
  • 将构建产物(如exe, dll)存档,用于后续测试或发布。

更高级的优化:分层缓存对于超大型项目,可以实施分层缓存策略:第一层是公司全局缓存(如NuGet),第二层是项目组缓存(文件共享),第三层是CI Runner本地磁盘缓存。vcpkg会依次查找,最大化命中率。

实操心得:在CI中,务必为不同的编译配置(Triplet)和编译器版本生成独立的二进制缓存包。例如,x64-windows的MSVC 2022和x64-windows的MSVC 2019编译出的库是不兼容的。vcpkg的二进制缓存机制会自动区分这些变量,但你需要确保CI流水线覆盖了所有团队使用的配置组合。

5. 进阶技巧与避坑指南

掌握了三大狠招,你已经能解决90%的问题。剩下的10%是各种“坑”和“优化点”,处理好了能让体验更上一层楼。

5.1 处理特定平台的构建失败

vcpkg的官方端口覆盖了数千个库,但并非所有库在所有平台上都能一键编译通过。尤其是某些较老或平台相关性强的库。

常见问题与解决思路:

  1. 缺失系统依赖:有些库需要系统级的工具或头文件。例如,在Linux上编译libcurl可能需要libssl-dev。vcpkg的端口文件有时会通过vcpkg_find_acquire_program来获取,但有时需要你手动安装。

    • 方案:仔细阅读构建失败的错误信息。如果是fatal error: openssl/ssl.h: No such file or directory,通常意味着需要安装系统包。在Ubuntu上就是sudo apt-get install libssl-dev
  2. 补丁失败:vcpkg经常通过补丁(patch)文件来修复上游源码在特定平台的编译问题。如果补丁应用失败,可能是源码版本更新导致上下文变化。

    • 方案:可以尝试在Overlay端口中移除或更新对应的补丁文件。去vcpkg的GitHub仓库的ports/<portname>目录下,查看最新的补丁文件,将其拷贝到你的Overlay中。
  3. 编译器兼容性:某些库可能对编译器版本有严格要求。

    • 方案:查看端口的vcpkg.json,看是否有supports字段限制了平台。如果必须使用,可以考虑在Overlay中修改构建脚本,或寻找替代库。

通用排查步骤:

  1. 在vcpkg安装命令后添加--debug选项,获取详细输出。
  2. 查看vcpkg构建目录下的日志文件,通常位于buildtrees/<portname>下的config-<triplet>-out.logbuild-<triplet>-out.log
  3. 搜索错误关键词,结合库的官方文档和vcpkg的GitHub Issues寻找解决方案。

5.2 管理磁盘空间与清理策略

vcpkg默认会将所有源码、中间构建文件和最终安装文件都保留在本地。长期使用后,buildtreespackagesdownloads目录可能会占用数十GB空间。

空间管理策略:

  • 定期清理:使用vcpkg remove --outdated可以删除已安装包中那些不是任何清单(vcpkg.json)直接或间接依赖的包。但更彻底的是手动删除目录:

    • vcpkg/buildtrees:可以安全删除,里面是解压后的源码和构建中间文件。下次安装时会重新下载和构建。
    • vcpkg/packages:存放已编译好的、可供不同项目复用的包。如果你确信所有项目都通过清单文件管理,并且有可靠的二进制缓存,也可以考虑清理。
    • vcpkg/downloads:下载的源码包和工具缓存。可以清理,但清理后再次安装需要重新下载。
  • 使用符号链接(仅限Windows):可以将vcpkg整个目录放在空间较大的硬盘(如D盘),然后在常用位置(如C盘)创建一个指向它的目录链接(mklink /J),既方便访问又不占用系统盘空间。

  • 在CI中优化:CI Runner通常是临时环境,每次构建后可以完全清理vcpkg目录。关键在于配置好VCPKG_BINARY_SOURCES,让CI从缓存下载二进制,而不是从头编译。

5.3 性能调优与最佳实践

  1. 并行编译:vcpkg在安装多个包时默认会尝试并行构建。你可以通过环境变量VCPKG_MAX_CONCURRENCY来控制并行任务数,将其设置为CPU核心数,可以最大化利用硬件资源。

    set VCPKG_MAX_CONCURRENCY=8
  2. 选择合适的Triplet:Triplet决定了库的构建配置。x64-windows默认构建动态库(DLL),x64-windows-static构建静态库。静态链接会生成更大的可执行文件,但部署更简单(没有DLL依赖)。根据项目发布需求谨慎选择。对于Linux,通常使用x64-linuxx64-linux-release

  3. 利用“特性”:许多vcpkg包支持特性(features)。例如,安装opencv时,可以通过opencv[contrib,nonfree]来安装额外的模块。在vcpkg.json中声明特性,可以精确控制库的功能,避免安装不需要的组件,减少编译时间和依赖复杂度。

  4. 保持vcpkg自身更新:定期更新vcpkg仓库(git pull),可以获取最新的包版本、Bug修复和安全更新。但更新后,建议在非关键分支上测试项目,确认兼容性后再更新主线的builtin-baseline

6. 从理论到实践:一个完整的工作流示例

让我们串联起所有“狠招”,为一个名为“DataProcessor”的跨平台C++项目搭建一套理想的依赖管理工作流。

项目初始化:

  1. 环境准备:团队统一在D:\dev下克隆vcpkg。在项目根目录执行vcpkg new --application生成vcpkg.json
  2. 定义依赖:编辑vcpkg.json,声明需要fmt,spdlog,nlohmann-json,openssl。确定一个初始的builtin-baseline,提交到Git。

团队协作配置:

  1. 创建CMakePresets.json:定义windows-staticlinux-release两个预设,其中包含指向团队统一vcpkg路径的工具链文件配置。
  2. 设置二进制缓存:在团队NAS上创建共享目录\\nas\team-cache\vcpkg。在项目的vcpkg-configuration.json中配置binary-sources指向该共享目录。
  3. 内部库管理:公司有一个内部日志库company-core。在GitLab上创建vcpkg-registry仓库,为其编写端口文件。在项目的vcpkg-configuration.json中注册这个私有仓库。

开发者新机上手:

  1. 克隆项目代码。
  2. 运行cmake --preset=windows-static。CMake会自动调用vcpkg,vcpkg会:
    • 读取vcpkg.jsonvcpkg-configuration.json
    • 对于fmt等公开库,从官方仓库获取,并优先从\\nas\team-cache下载二进制包。
    • 对于company-core,从私有注册表仓库获取。
    • 自动安装所有依赖,配置好CMake。
  3. 打开生成的解决方案或直接cmake --build,开始编码。整个过程无需手动下载、编译、配置任何库的路径。

CI/CD流水线:

  1. CI Runner拉取代码。
  2. 执行同样的cmake --preset命令。因为共享缓存中已有二进制包,依赖安装瞬间完成。
  3. 编译项目,运行测试。
  4. (可选)如果本次提交更新了某个依赖的版本,CI在成功构建后,将新编译出的二进制包上传到共享缓存,供后续构建和其他开发者使用。

这套流程将依赖管理从一项耗时、易错的“体力活”,转变为自动化、可重复、高效的“后台服务”。开发者可以将精力完全集中在业务逻辑开发上,这才是“开发效率提升200%”的真正含义——不是编译速度真的快了两倍,而是将你从无尽的依赖泥潭中解放了出来,获得了更多纯粹的创造时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 16:18:26

如何快速搭建B站直播自动录制系统:录播姬完整配置指南

如何快速搭建B站直播自动录制系统&#xff1a;录播姬完整配置指南 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 你是否曾因错过心爱主播的直播而遗憾&#xff1f;是否因为传统录制工…

作者头像 李华
网站建设 2026/8/7 16:16:53

Spring Boot高并发场景下用户观看记录模块设计与实现

最近在开发一个基于Spring Boot的在线视频平台项目时&#xff0c;遇到了一个非常典型的场景&#xff1a;如何优雅地处理一个业务模块&#xff08;比如“用户观看记录”&#xff09;从数据采集、处理、存储到前端展示的完整流程。这让我想起了一个有趣的比喻——就像记录“宁姆韦…

作者头像 李华
网站建设 2026/8/7 16:16:18

ESP-IDF物联网开发框架:从核心架构到实战应用

1. ESP-IDF&#xff1a;物联网开发的“瑞士军刀” 如果你正在寻找一个能让你从零开始&#xff0c;快速构建稳定、功能丰富的物联网设备的开发框架&#xff0c;那么ESP-IDF绝对是你绕不开的核心工具。它不是什么遥不可及的“黑科技”&#xff0c;而是乐鑫官方为自家ESP32、ESP32…

作者头像 李华
网站建设 2026/8/7 16:15:23

RevokeMsgPatcher终极指南:Windows版微信/QQ/TIM防撤回完整教程

RevokeMsgPatcher终极指南&#xff1a;Windows版微信/QQ/TIM防撤回完整教程 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://g…

作者头像 李华
网站建设 2026/8/7 16:15:14

Mermaid Live Editor:3分钟上手,免费创建专业图表的神奇工具

Mermaid Live Editor&#xff1a;3分钟上手&#xff0c;免费创建专业图表的神奇工具 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/me…

作者头像 李华