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 fmtManifest 模式(推荐)
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 buildCMake 集成
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=ReleaseCMakePresets.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.jsoncmake
# 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 让配置一键完成。