Compartilhar via


O que é o modo de manifesto?

O vcpkg tem dois modos de operação: modo clássico e modo de manifesto. Para a maioria dos usuários, recomendamos o modo de manifesto.

O modo de manifesto usa arquivos JSON declarativos para descrever metadados sobre seu projeto ou pacote. Os arquivos de manifesto devem ter o vcpkg.json nome.

O modo de manifesto é ativado executando o vcpkg install comando enquanto há um arquivo de manifesto (vcpkg.json) no diretório de trabalho. Leia adiante para obter detalhes sobre como instalar pacotes no modo de manifesto.

O modo de manifesto também é necessário para usar recursos avançados, como controle de versão e registros personalizados.

Arquivos de manifesto em portas

Todas as portas vcpkg devem incluir um vcpkg.json arquivo que descreva metadados sobre o pacote que instalam.

O vcpkg usa os metadados no manifesto do pacote para vários fins, como calcular árvores de dependência, pesquisar pacotes por nome ou descrição, resolver recursos, etc.

Exemplo de manifesto do pacote

{
  "name": "fmt",
  "version": "10.1.1",
  "description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
  "homepage": "https://github.com/fmtlib/fmt",
  "license": "MIT",
  "dependencies": [
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    }
  ]
}

Arquivos de manifesto em projetos

O principal objetivo de usar um arquivo de manifesto em seu projeto é declarar suas dependências. Ao usar um manifesto de projeto, você pode especificar restrições e substituições de versão para bloquear versões específicas de suas dependências. Esse recurso não está disponível no modo clássico.

Exemplo de manifesto do projeto

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

Arquivo de configuração

O vcpkg pode ser configurado por meio de um vcpkg-configuration.json arquivo para adicionar mais registros de pacotes ou sobrepor portas e locais de trigêmeos .

Exemplo de arquivo de configuração

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/microsoft/vcpkg-docs",
      "reference": "vcpkg-registry",
      "baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
      "packages": [ "beicode", "beison" ]
    }
  ],
  "overlay-ports": [
    "C:\\dev\\my_vcpkg_ports"
  ]
}

Instalando pacotes no modo de manifesto

Para instalar pacotes usando um arquivo de manifesto, use o vcpkg install comando sem nenhum argumento de pacote. O comando deve ser executado a partir de um diretório que contém um arquivo de manifesto (vcpkg.json) ou o caminho para um arquivo de manifesto fornecido usando a --x-manifest-root=<path> opção.

Os pacotes instalados no modo de manifesto não serão instalados no diretório global installed como no modo clássico. Em vez disso, cada manifesto obtém seu próprio diretório de instalação chamado vcpkg_installed; o vcpkg_installed diretório é criado no mesmo diretório que contém o arquivo de manifesto.

Ter árvores de instalação independentes por manifesto permite a separação de dependências entre diferentes projetos. Isso contorna uma limitação crucial do modo clássico, que permite que apenas uma versão de cada porta seja instalada. O modo de manifesto mantém as versões das portas separadas por projeto.

Usando recursos em manifestos de projeto

Os arquivos de manifesto podem definir conjuntos aditivos de funcionalidade, comportamento e dependências por meio do uso de "recursos".

Em seus projetos, você pode definir recursos para habilitar ou desabilitar dependências que se aplicam a partes do seu projeto. Por exemplo, se o seu projeto contiver vários componentes, talvez você queira manter as "dependencies" dependências comuns na lista, mas limitar algumas outras aos seus respectivos componentes.

Para habilitar os recursos do seu projeto, você pode usar um dos seguintes métodos:

Exemplo: recursos em manifestos de projeto

{
  "name": "my-game",
  "dependencies": [ "grpc" ],
  "features": {
    "client": {
      "description": "client game executable",
      "dependencies": [ "sdl2", "bullet3" ]
    },
    "server": {
      "description": "multiplayer server executable",
      "dependencies": [ "proxygen" ]
    },
    "tests": {
      "description": "development tests",
      "dependencies": [ "gtest" ]
    }
  }
}

Para criar apenas as dependências do componente "cliente", execute:

vcpkg install --x-feature=client

Próximas etapas

Aqui estão algumas tarefas para tentar a seguir: