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:
- Passe a
--x-feature
opção para o seuvpckg install
comando. - No CMake, defina antes da
VCPKG_MANIFEST_FEATURES
primeira chamada comoproject()
. - No MSBuild, passe a
--x-feature
opção por meio de 'VcpkgAdditionalInstallOptions.
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:
- Concluir o tutorial do modo de manifesto
- Leia o
vcpkg.json
evcpkg-configuration.json
artigos de referência. - Bloquear suas versões para builds repetíveis usando controle de versão