Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
vcpkg determina o registo responsável (ou sobreposição) para cada pacote antes de contactar a rede. Isso previne ataques de confusão de dependência de pacotes porque a resolução de nomes não depende de qualquer estado externo.
As etapas do algoritmo de resolução de nomes são:
- Se o nome for encontrado numa sobreposição, use essa sobreposição; caso contrário,
- Se houver um
"packages"padrão que corresponde ao nome da porta, use esse registro; caso contrário, - Se o registro padrão não for
null, use esse registro; caso contrário - Falha ao resolver a porta para um registro.
Quando há vários "packages" padrões que correspondem ao nome, o vcpkg prioriza da seguinte maneira:
-
Correspondência exata --
boosté escolhida em vez deboost* -
Padrão mais longo --
boost*é escolhido em vez deb* - Primeira correspondência -- O primeiro registro declarando o melhor padrão é escolhido
Exemplo #1: Resolução de nome de pacote
vcpkg-configuration.json
{
"registries": [
{
"kind": "git",
"repository": "https://github.com/MicrosoftDocs/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": ["bei*"]
},
{
"kind": "git",
"repository": "https://github.com/vicroms/vcpkg-registry",
"baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
"packages": ["beicode", "bei*"]
}
]
}
vcpkg.json
{
"dependencies": [
"beicode",
"beison",
"fmt"
],
"builtin-baseline": "7e7c62d863b1bf599c1d104b76cd8b74475844d4"
}
Dada esta configuração, cada nome de pacote é resolvido para:
-
beicode: do registrohttps://github.com/vicroms/vcpkg-registry(correspondência exata embeicode) -
beison: do registohttps://github.com/MicrosoftDocs/vcpkg-docs(correspondência de padrão embeisone declarado primeiro no vetor"registries") -
fmt: do registro padrão (sem correspondências)
Como vários registros declaram bei*, vcpkg também emitirá um aviso:
Found the following problems in configuration (path/to/vcpkg-configuration.json):
$ (a configuration object): warning: Package "bei*" is duplicated.
First declared in:
location: $.registries[0].packages[0]
registry: https://github.com/MicrosoftDocs/vcpkg-docs
The following redeclarations will be ignored:
location: $.registries[1].packages[1]
registry: https://github.com/vicroms/vcpkg-registry
Exemplo #2: Atribuir vários padrões ao registro padrão
Você pode alterar o registro padrão de duas maneiras. Em primeiro lugar, definindo o "default-registry":
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3"
}
}
Em segundo lugar, ao definir o "default-registry" para null e usar o padrão "*" na matriz "registries":
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3",
"packages": ["*"]
}
]
}
Uma vantagem do segundo formulário é que você pode adicionar mais entradas à matriz de pacotes, enquanto o "default-registry" objeto não permite que você defina uma matriz de pacotes. Essa diferença torna-se importante nos casos em que você precisa garantir que um pacote vem do registro padrão.
Vamos considerar um registro que forneça as bibliotecas do Qt Framework.
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "7e7c62d863b1bf599c1d104b76cd8b74475844d4"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/custom-qt/custom-qt-registry",
"baseline": "adfc4de488094a384ca2c202b923ccc097956e0c",
"packages": ["qt*"]
}
]
}
E as seguintes dependências do projeto:
vcpkg.json
{
"dependencies": [
"qt5",
"qt-advanced-docking-system",
"qtkeychain"
]
}
O "qt*" padrão corresponde a todos os nomes de porta no vcpkg.json. Mas há um problema! As portas qt-advanced-docking-system e qtkeychain não fazem parte das bibliotecas oficiais do Qt Framework e, como vcpkg não será capaz de encontrar as portas no registro personalizado, a instalação falhará.
Isso pode ser corrigido atribuindo esses pacotes ao registro padrão.
Conseguimos isso alterando a maneira como declaramos o registro padrão e adicionando qt-advanced-docking-system e qtkeychain à sua "packages" matriz:
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3",
"packages": ["*", "qt-advanced-docking-system", "qtkeychain"]
},
{
"kind": "git",
"repository": "https://github.com/custom-qt/custom-qt-registry",
"baseline": "adfc4de488094a384ca2c202b923ccc097956e0c",
"packages": ["qt*"]
}
]
}
Porque as correspondências exatas são preferíveis às correspondências de padrão, qt-advanced-docking-system e qtkeychain serão resolvidos para o registro padrão.
Portas de sobreposição
As portas de sobreposição são uma maneira de estender o vcpkg com portas adicionais sem criar um registro completo. As sobreposições são consideradas antes de qualquer pesquisa de registro ou considerações de controle de versão. As sobreposições substituem quaisquer tripletos ou portas integradas. Consulte as portas de sobreposição para saber mais.
As portas de sobreposição são avaliadas nesta ordem:
- Sobreposições da linha
--overlay-portsde comando na ordem passada; - Sobreposições de
vcpkg-configuration.json"overlay-ports"em ordem; em seguida, - Sobreposições da
VCPKG_OVERLAY_PORTSvariável de ambiente sequencialmente.
Trigêmeos de sobreposição
Trigêmeos de sobreposição são uma maneira de estender vcpkg com trigêmeos adicionais, sem modificar o diretório de instalação do vcpkg. As sobreposições são consideradas antes de qualquer triplo integrado.
Os trigêmeos de sobreposição são avaliados nesta ordem:
- Sobreposições da linha de comando na ordem em que são passadas; em seguida,
- Sobreposições de
vcpkg-configuration.jsonem ordem; em seguida, - Sobreposições da
VCPKG_OVERLAY_TRIPLETSvariável de ambiente em ordem.