概述
vcpkg
是一个 C++ 包管理器,用于 Windows、Linux 和 macOS。它由 Microsoft 维护,并支持大量的 C++ 库。使用 vcpkg
,你可以轻松地安装、升级和管理 C++ 依赖库。
实践
安装 vcpkg
git clone https://github.com/microsoft/vcpkg
./bootstrap-vcpkg.sh
./vcpkg —version
vcpkg package management program version 2024-04-23-d6945642ee5c3076addd1a42c331bbf4cfc97457
See LICENSE.txt for license information.
vcpkg integrate bash
Adding vcpkg completion entry to /home/abel/.bashrc.
将目录增加到 PATH 里面方便运行。
尝试基本操作
1 |
|
build
1 | # 设置好 VCPKG_ROOT 环境变量 |
不要去使用,因为没有用。
1 | set(CMAKE_TOOLCHAIN_FILE "/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake" |
在使用 vcpkg 管理项目依赖时,vcpkg.json 是一个配置文件,专门用来定义项目所需的依赖库以及版本信息。通过这种方式,vcpkg 会自动解析并安装这些库,从而让项目构建更加方便和可重复。
vcpkg.json 的主要功能
• 定义项目所依赖的库及版本号。
• 自动管理依赖库的安装、更新和清理。
• 与 CMake 等构建工具无缝集成。
vcpkg.json 文件的基本结构
以下是一个示例的 vcpkg.json 配置文件:
{
“name”: “my-cool-project”,
“version”: “1.0.0”,
“description”: “A project using vcpkg to manage dependencies.”,
“dependencies”: [
{ “name”: “fmt”, “version>=”: “9.1.0” },
“boost”,
“openssl”
],
“builtin-baseline”: “abcd1234efgh5678ijkl9012mnop3456qrst7890”
}
字段说明
1. name:
• 项目名称,通常是你项目的标识符。
• 例如:"my-cool-project"
2. version:
• 项目版本号,遵循语义化版本规则。
• 例如:"1.0.0"
3. description:
• 对项目的简要描述(可选)。
• 例如:"A project using vcpkg to manage dependencies."
4. dependencies:
• 项目依赖的库,可以是库名或指定版本的对象。
• 支持的格式:
• 仅指定库名:"boost"
• 指定版本范围:{ "name": "fmt", "version>=": "9.1.0" }
5. builtin-baseline:
• 指定 vcpkg 使用的 Git 基线版本(必须匹配你的 vcpkg 克隆仓库的某次提交),确保依赖解析的一致性。
• 例如:"abcd1234efgh5678ijkl9012mnop3456qrst7890"
使用 vcpkg.json 管理项目依赖
- 初始化 vcpkg.json
在项目根目录创建 vcpkg.json 文件并填入依赖信息。例如:
{
“name”: “my-example”,
“version”: “1.0.0”,
“dependencies”: [
“fmt”,
“boost”,
{ “name”: “openssl”, “version>=”: “1.1.1” }
],
“builtin-baseline”: “abcd1234efgh5678ijkl9012mnop3456qrst7890”
}
- 运行依赖安装命令
在 vcpkg 根目录下,运行以下命令解析和安装依赖:
vcpkg install
• 该命令会读取项目的 vcpkg.json 文件,自动安装依赖库及其版本。
- 与 CMake 项目集成
在项目的 CMakeLists.txt 文件中,启用 vcpkg.json 集成:
CMakeLists.txt
设置 vcpkg 的工具链文件
set(CMAKE_TOOLCHAIN_FILE “${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake”)
项目定义
project(my-example)
添加依赖的库
find_package(fmt CONFIG REQUIRED)
find_package(Boost REQUIRED)
链接库到目标
add_executable(main main.cpp)
target_link_libraries(main PRIVATE fmt::fmt Boost::Boost)
运行 CMake 时会自动解析和使用 vcpkg.json 中定义的依赖。
- 其他有用的命令
• 升级依赖库:
vcpkg upgrade
根据 vcpkg.json 检查并升级依赖库版本。
• 移除未使用的库:
vcpkg remove —outdated
• 查看安装的库:
vcpkg list
依赖版本管理
在 dependencies 中可以使用以下方式定义版本:
1. 不指定版本(默认最新):
“dependencies”: [“fmt”, “boost”]
2. 指定最小版本:
“dependencies”: [
{ “name”: “fmt”, “version>=”: “9.1.0” }
]
3. 指定精确版本:
“dependencies”: [
{ “name”: “fmt”, “version”: “9.1.0” }
]
4. 版本范围(不常用):
“dependencies”: [
{ “name”: “fmt”, “version>=”: “9.0.0”, “version<=”: “9.1.0” }
]
使用场景和优势
• 简化依赖管理:开发者只需定义依赖,vcpkg 自动安装和管理。
• 一致性保证:builtin-baseline 确保团队中的每个人使用相同版本的依赖。
• 版本更新简单:通过更新 vcpkg.json 和 builtin-baseline 即可完成依赖升级。
如果你需要帮助配置具体依赖或项目集成,欢迎提供更多信息!
引用
- [1] vcpkg-github站点
- [2] 中文文档
- [3] vcpkg-库查询
- [4] https://vcpkg.io/en/index.html