使用vcpkg管理依赖第三库


使用vcpkg管理依赖第三库

vcpkg 有两种操作模式:经典模式和清单模式。

经典模式下,使用 vcpkg 作为命令行接口在vcpkg 安装目录中安装依赖项。 通常,位于中 %VCPKG_ROOT%/installed,其中 %VCPKG_ROOT% 是 vcpkg 的安装目录。

清单模式下,在新建项目文件夹,在名为 vcpkg.json的清单文件中声明项目的直接依赖项。此模式下,会根据清单文件生成项目自己的vcpkg_installed目录,用于安装依赖项,这与经典模式不同,经典模式的所有包都安装在公共 %VCPKG_ROOT%/installed 目录中。 因此,每个项目都可以有自己的清单和自己的一组不与其他项目的依赖项冲突的依赖项。
而且,只有清单模式才能使用高级功能,例如 版本控制自定义注册表
使用清单模式安装包,这是大多数用户推荐的工作流。

vcpkg安装

找到vcpkg的github目录

克隆到本地目录:

> git clone https://github.com/Microsoft/vcpkg

进入vcpkg目录,启动安装:

> .\vcpkg\bootstrap-vcpkg.bat

等待程序下载vcpkg.exe结束,脚本运行完毕。

这里需要注意:

1.必须用git下载vcpkg工作空间,否则项目清单模式应用时,为项目依赖库添加版本控制时,命令‘vcpkg x-update-baseline --add-initial-baseline’无法为清单文件添加基线版本。
2.windows平台使用PowerShell工具,且需要最新版本,找到PowerShell的github官网下载安装。

vcpkg经典模式使用

从仓库列表搜索依赖项

> vcpkg search zlib

从某个基线版本的列表中查询某个依赖项信息

> git show 2815578f4a3486cec24c9b07d17e18e03bbaf667:versions/baseline.json | egrep -A 3 -e '"zlib"|"fmt"|"curl"'

注意:

1.基线版本号就是vcpkg的github目录的提交记录的SHA哈希值。
2.egrep 是unix和linux中的命令,故需要在git的命令行窗口来使用。

关于基线版本号如何获取?
首先到vcpkg的github官网,然后找到commits,如下图所示
在这里插入图片描述
在commits页面,选择需要的提交版本号的SHA哈希值
在这里插入图片描述

安装依赖库

# 默认安装
> vcpkg install curl
# 安装支持OpenSSL的curl
> install curl[openssl]
# 安装支持OpenSSL和LibSHH2的curl
> install curl[openssl,ssh]

vcpkg清单模式的使用

vcpkg清单模式的使用例子说明

示例项目文件目录

hello
|  -- build/ : 项目的CMake构建目录
|  -- CMakeLists.txt : 项目的CMake文件
|  -- main.cpp
L  -- vcpkg.json : vcpkg的项目级管理清单文件

main.cpp:

#include <fmt/core.h>
#include <zlib.h>

int main()
{
    fmt::print("fmt version is {}\n"
               "zlib version is {}\n", 
               FMT_VERSION, ZLIB_VERSION);
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.18)

project(versionstest CXX)

add_executable(main main.cpp)

find_package(ZLIB REQUIRED)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE ZLIB::ZLIB fmt::fmt)

vcpkg.json:

{
    "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
    "name": "hello",
    "version": "0.0.1",
    "description": "vcpkg study tutorial: hello",
    "dependencies": [
        "fmt",
        {
            "name": "zlib",
            "platform": "windows & x64"
        },
        {
            "name": "curl",
            "platform": "windows & x64",
            "version>=": "8.1.2",
            "features": [
                "ssh",
                {
                  "name": "openssl",
                  "platform": "windows & x64"
                }
            ]
        }
    ],
    "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
    "overrides": [
        {
            "name": "fmt",
            "version": "10.1.1"
        }
    ]
}

构建流程:

# %VCPKG_ROOT%表示VCPKG.exe所在的根目录
> cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake
# CMake构件编译系统后,针对Visual Studio项目,需要用软件打开sln解决方案编译

说明:
使用基线添加版本约束:

# 针对vcpkg.json清单文件未添加"builtin-baseline"的情况,在清单文件所在目录运行命令:
> vcpkg x-update-baseline --add-initial-baseline

使用基线添加版本约束的含义是,基线确定了vcpkg的github仓库中各个库包的最低版本。

添加最低版本约束:
基线不是锁定包版本的唯一方法。 vcpkg 还接受形式的 **version>=**最低版本约束。

"dependencies": [
        "fmt",
        {
            "name": "zlib",
            "platform": "windows & x64"
        },
        {
            "name": "curl",
            "platform": "windows & x64",
            "version>=": "8.1.2",
            ...

强制使用特定版本:
在某些情况下,可能需要强制使用特定版本的包,例如:

  • 解决版本冲突。
  • 锁定早于基线的版本。
  • 锁定其他无法比拟的版本,例如: vista、 xp。
...
"overrides": [
        {
            "name": "fmt",
            "version": "10.1.1"
        }
    ]
...

关于使用基线添加版本约束添加最低版本约束强制使用特定版本三者的关系:
见示例:

{
  "dependencies": [
    {
        "name": "fmt",
        "version>=": "10.1.1"
    },
    "zlib"
  ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc", 
  "overrides": [
    { 
        "name": "zlib", 
        "version": "1.2.8"
    }
  ]
}

3426db05b996481ca31e95fff3734cf23e0f51bc使用基线添加版本约束:

  • fmt:“version>=”: “7.1.3”
  • zlib:“version”:“1.2.11”

添加最低版本约束:

  • fmt:“version>=”: “10.1.1”

强制使用特定版本:

  • zlib:“version”:“1.2.8”

安装时,fmt最终采用了添加最低版本约束,zlib最终采用了强制使用特定版本
说明:强制使用特定版本有最高优先级,使用基线添加版本约束强制使用特定版本的版本低时,使用强制使用特定版本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值