Skip to content

vcpkg 包管理器

vcpkg 是 Microsoft 开源的 C++ 包管理器,与 CMake 深度集成,支持 2000+ 库,是 Windows/Linux/macOS 跨平台开发的首选。

安装

bash
# 克隆 vcpkg
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg

# Windows
.\bootstrap-vcpkg.bat

# Linux/macOS
./bootstrap-vcpkg.sh

# 添加到 PATH(可选)
export VCPKG_ROOT=/path/to/vcpkg
export PATH=$VCPKG_ROOT:$PATH

基本使用

bash
# 搜索包
vcpkg search fmt
vcpkg search json

# 安装包
vcpkg install fmt spdlog nlohmann-json cli11 gtest

# 安装特定版本
vcpkg install fmt:x64-linux

# 列出已安装的包
vcpkg list

# 删除包
vcpkg remove fmt

Manifest 模式(推荐)

json
// vcpkg.json(项目根目录)
{
    "name": "my-project",
    "version": "1.0.0",
    "dependencies": [
        "fmt",
        "spdlog",
        "nlohmann-json",
        "cli11",
        {
            "name": "boost-asio",
            "version>=": "1.84.0"
        },
        {
            "name": "gtest",
            "features": ["gmock"]
        }
    ],
    "builtin-baseline": "2024-01-01"
}
bash
# Manifest 模式:自动安装 vcpkg.json 中的依赖
cmake -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build

CMake 集成

cmake
# CMakeLists.txt
cmake_minimum_required(VERSION 3.25)
project(MyProject)

# vcpkg 工具链文件会自动设置 CMAKE_PREFIX_PATH
find_package(fmt CONFIG REQUIRED)
find_package(spdlog CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
find_package(CLI11 CONFIG REQUIRED)
find_package(GTest CONFIG REQUIRED)

add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE
    fmt::fmt
    spdlog::spdlog
    nlohmann_json::nlohmann_json
    CLI11::CLI11
)

# 测试
add_executable(tests test_main.cpp)
target_link_libraries(tests PRIVATE GTest::gtest_main)
bash
# 配置时指定工具链
cmake -B build \
    -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
    -DCMAKE_BUILD_TYPE=Release

CMakePresets.json 集成

json
{
    "version": 6,
    "configurePresets": [
        {
            "name": "default",
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/build",
            "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release"
            }
        }
    ]
}

自定义 Overlay Port

bash
# 添加本地 overlay(自定义或修改的包)
vcpkg install mylib --overlay-ports=./my-ports

# 目录结构
my-ports/
└── mylib/
    ├── portfile.cmake
    └── vcpkg.json
cmake
# portfile.cmake 示例
vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO myorg/mylib
    REF v1.0.0
    SHA512 abc123...
)

vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
vcpkg_cmake_install()
vcpkg_cmake_config_fixup()

vcpkg vs Conan 对比

vcpkg:
  优点:与 CMake 集成最简单,Windows 支持最好,2000+ 包
  缺点:二进制缓存功能较弱,包版本管理不如 Conan 灵活
  适合:中小型项目,Windows 开发,快速上手

Conan:
  优点:二进制缓存强大,版本管理灵活,支持私有服务器
  缺点:配置较复杂,学习曲线稍陡
  适合:大型项目,CI/CD 优化,企业级开发

关键认知

vcpkg Manifest 模式(vcpkg.json)是推荐用法,将依赖版本锁定在项目中,保证团队一致性。CMAKE_TOOLCHAIN_FILE 是连接 vcpkg 和 CMake 的关键。设置 VCPKG_ROOT 环境变量,配合 CMakePresets.json 让配置一键完成。

系统学习 C++ 生态,深入底层架构