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.
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.
{
"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
}
]
}
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.
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
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 .
{
"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"
]
}
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.
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.
{
"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
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
Comentários do vcpkg
O vcpkg é um projeto código aberto. Selecione um link para fornecer comentários: