vcpkg 入门指南 
vcpkg 是 Microsoft 开发的跨平台 C++ 包管理器,用于简化 C++ 库的获取和管理。本文档将带您从零开始了解如何安装和使用 vcpkg。
什么是 vcpkg 
vcpkg 是一个免费的开源包管理器,专为 C++ 库设计。它提供了:
- 跨平台支持:支持 Windows、Linux 和 macOS
- 大量库支持:包含超过 2000 个经过验证的开源库
- 简单易用:通过命令行轻松管理依赖项
- 工具链集成:与 Visual Studio、VS Code 和 CMake 无缝集成
先决条件 
在开始之前,请确保您的系统已安装以下工具:
- 终端(命令行界面)
- C++ 编译器- Windows:Visual Studio 的 MSVC
- Linux:GCC 或 Clang
- macOS:Xcode 命令行工具
 
- CMake:用于构建项目
- Git:用于克隆 vcpkg 仓库
1. 安装 vcpkg 
1.1 克隆 vcpkg 仓库 
首先从 GitHub 克隆 vcpkg 仓库:
git clone https://github.com/microsoft/vcpkg.git1.2 运行引导脚本 
进入 vcpkg 目录并运行引导脚本:
Windows (CMD/PowerShell):
cd vcpkg
.\bootstrap-vcpkg.batLinux/macOS:
cd vcpkg
./bootstrap-vcpkg.sh引导脚本会执行先决条件检查并下载 vcpkg 可执行文件。
1.3 配置环境变量 
为了方便使用,建议配置环境变量:
Windows (PowerShell):
$env:VCPKG_ROOT = "C:\path\to\vcpkg"
$env:PATH = "$env:VCPKG_ROOT;$env:PATH"Linux/macOS (Bash):
export VCPKG_ROOT=/path/to/vcpkg
export PATH=$VCPKG_ROOT:$PATH💡 提示:为了让环境变量永久生效,请将其添加到系统环境变量中。
2. 创建项目 
2.1 创建项目目录 
mkdir helloworld && cd helloworld2.2 初始化 vcpkg 清单 
使用 vcpkg 命令创建清单文件:
vcpkg new --application这会在项目目录中创建 vcpkg.json 和 vcpkg-configuration.json 文件。
3. 添加依赖项 
3.1 添加库依赖 
以 fmt 库为例,添加依赖项:
vcpkg add port fmt此时 vcpkg.json 文件内容如下:
{
    "dependencies": [
        "fmt"
    ]
}3.2 创建 CMakeLists.txt 
创建 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld)
find_package(fmt CONFIG REQUIRED)
add_executable(HelloWorld helloworld.cpp)
target_link_libraries(HelloWorld PRIVATE fmt::fmt)CMakeLists.txt 文件解析:
- cmake_minimum_required(VERSION 3.10):指定最低 CMake 版本
- project(HelloWorld):设置项目名称
- find_package(fmt CONFIG REQUIRED):查找 fmt 库
- add_executable(HelloWorld helloworld.cpp):创建可执行文件
- target_link_libraries(HelloWorld PRIVATE fmt::fmt):链接 fmt 库
3.3 创建源码文件 
创建 helloworld.cpp 文件:
#include <fmt/core.h>
int main()
{
    fmt::print("Hello World!\n");
    return 0;
}4. 构建和运行项目 
4.1 配置 CMake 预设 
创建 CMakePresets.json 文件:
{
  "version": 2,
  "configurePresets": [
    {
      "name": "vcpkg",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}创建 CMakeUserPresets.json 文件:
{
  "version": 2,
  "configurePresets": [
    {
      "name": "default",
      "inherits": "vcpkg",
      "environment": {
        "VCPKG_ROOT": "<path to vcpkg>"
      }
    }
  ]
}⚠️ 注意:将
<path to vcpkg>替换为您的 vcpkg 安装路径。
4.2 配置项目 
cmake --preset=default4.3 构建项目 
cmake --build build4.4 运行程序 
Windows:
.\build\HelloWorld.exeLinux/macOS:
./build/HelloWorld输出结果:
Hello World!5. 常用 vcpkg 命令 
5.1 搜索包 
vcpkg search <package-name>5.2 安装包(经典模式) 
vcpkg install <package-name>5.3 列出已安装的包 
vcpkg list5.4 移除包 
vcpkg remove <package-name>5.5 更新所有包 
vcpkg upgrade6. 清单模式 vs 经典模式 
6.1 清单模式(推荐) 
- 使用 vcpkg.json文件管理依赖项
- 项目级别的依赖管理
- 更好的版本控制支持
- 适合团队协作
6.2 经典模式 
- 全局安装包
- 系统级别的包管理
- 适合快速原型开发
7. 与 IDE 集成 
7.1 Visual Studio 
vcpkg 与 Visual Studio 有原生集成支持:
vcpkg integrate install7.2 VS Code 
安装 CMake Tools 扩展,并在 settings.json 中配置:
{
    "cmake.configureSettings": {
        "CMAKE_TOOLCHAIN_FILE": "${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
    }
}8. 最佳实践 
8.1 版本管理 
- 将 vcpkg.json和vcpkg-configuration.json添加到版本控制
- 不要提交 CMakeUserPresets.json(包含本地路径)
8.2 依赖项管理 
- 优先使用清单模式
- 定期更新依赖项版本
- 使用版本约束确保兼容性
8.3 团队协作 
- 统一 vcpkg 版本
- 共享 CMake 预设配置
- 文档化依赖项选择理由
9. 常见问题 
9.1 编译器找不到包 
确保正确设置了 CMAKE_TOOLCHAIN_FILE:
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")9.2 包安装失败 
检查:
- 网络连接
- 编译器配置
- 磁盘空间
9.3 版本冲突 
使用 vcpkg-configuration.json 指定版本约束:
{
  "registries": [
    {
      "kind": "git",
      "baseline": "baseline-commit-hash",
      "repository": "https://github.com/Microsoft/vcpkg"
    }
  ]
}10. 进阶用法 
10.1 自定义端口 
创建自定义包:
vcpkg create <package-name> <source-url>10.2 覆盖端口 
在项目中创建 ports 目录,添加自定义端口定义。
10.3 私有注册表 
配置私有包注册表:
{
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/your-org/your-registry",
      "packages": ["your-package"]
    }
  ]
}总结 
vcpkg 是一个强大而易用的 C++ 包管理器,通过本指南您应该能够:
- ✅ 安装和配置 vcpkg
- ✅ 创建使用外部库的 C++ 项目
- ✅ 理解清单模式和经典模式的区别
- ✅ 与各种 IDE 和构建系统集成
- ✅ 解决常见问题