教程:从基于 Git 的注册表安装依赖项

vcpkg 使用称为注册表的概念来管理包的存储库。 默认情况下,vcpkg 从 https://github.com/Microsoft/vcpkg 的公共特选注册表查找库。 可以添加第三方或专用注册表,使其他包可供安装。

有关创建自己的注册表的信息,请阅读将包发布到注册表的教程。

注册表使用 vcpkg-configuration.json 文件配置。

在本教程中,学习:

先决条件

  • 终端
  • C++ 编译器
  • vcpkg
  • CMake

1 - 创建项目

在新文件夹中,创建以下项目文件:

源文件 (main.cpp):

#include <iostream>
#include <beison.h>

int main()
{
    beison::Object obj;
    obj.insert("name", beison::Value::string("demo"));
    std::cout << beison::stringify(obj) << std::endl;
    return 0;
}

CMake 项目文件 (CMakeLists.txt):

cmake_minimum_required(VERSION 3.18)

project(demo CXX)

add_executable(main main.cpp)

find_package(beicode CONFIG REQUIRED)
find_package(beison CONFIG REQUIRED)
target_link_libraries(main PRIVATE beicode::beicode beison::beison)

2 - 创建清单和配置文件

运行以下命令:

vcpkg new --application

new 命令将创建两个文件:清单 (vcpkg.json) 文件和配置 (vcpkg-configuration.json) 文件。 通常,该命令需要提供 --name--version 参数,但由于本教程是最终用户应用程序,因此我们改用 --application 选项。

生成的文件将包含以下内容:

vcpkg.json

{}

vcpkg-configuration.json

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "artifact",
      "location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip",
      "name": "microsoft"
    }
  ]
}

生成的配置文件包括两个注册表定义。 default-registry 指向 https://github.com/Microsoft/vcpkg 的特选 vcpkg 注册表,使用最新提交作为基线;以及额外的 "artifacts" 注册表,该注册表对于本教程来说并非必需,可以删除。

3 - 将专用注册表添加到 vcpkg 配置文件

源代码引用了 vcpkg 特选注册表中不可用的两个库。 为了满足这些依赖项,我们需要添加 https://github.com/NorthWindTraders/vcpkg-registry 作为附加注册表。

vcpkg-configuration.json 的内容修改为:

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/northwindtraders/vcpkg-registry",
      "baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
      "packages": [ "beicode", "beison" ]
    }
  ]
}

配置文件添加外部注册表作为 beicodebeison 包的源。 附加注册表必须显式声明其使用 "packages" 列表提供的包。 vcpkg 将包名称解析为注册表时,附加注册表中未找到的任何包名称都将默认为 "default-registry"。 在注册表文档中了解有关包名称解析的详细信息。

4 - 从注册表安装包

将注册表添加到配置文件后,无需执行任何特殊操作即可从中安装包。遵循通常的安装机制时,vcpkg 会透明地将 vcpkg.json 中的包名称解析为正确的注册表。

vcpkg.json 文件中添加 beicodebeison 依赖项:

vcpkg add port beicode beison

构建并运行项目(将 $VCPKG_ROOT 替换为你的 vcpkg 安装路径):

cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build

运行该程序,输出应该如下所示:

{
    "name": "demo"
}

后续步骤