Portas de sobreposição
Normalmente, as portas vcpkg são obtidas a partir de registos . É muito provável que a maioria das portas que você instala vêm do registro vcpkg oficial em https://github.com/Microsoft/vcpkg. VCPKG permite que você instale portas disponíveis para você através do sistema de arquivos, chamamos essas portas, portas de sobreposição.
Uma porta de sobreposição pode atuar como um substituto imediato para uma porta existente ou como uma nova porta que, de outro modo, não estaria disponível num registo . Enquanto resolver nomes de pacotes, as portas de sobreposição têm prioridade.
As portas de sobreposição são avaliadas na seguinte ordem:
- O diretório especificado na linha de comando via
--overlay-ports
, ou subdiretórios nomeados se esse diretório não tiver nenhum arquivoCONTROL
ouvcpkg.json
. - O diretório especificado através do
overlay-ports
no arquivovcpkg-configuration.json
, ou subdiretórios designados se esse diretório não tiver o arquivoCONTROL
ouvcpkg.json
. - O diretório especificado por entradas da variável de ambiente
VCPKG_OVERLAY_PORTS
, ou subdiretórios nomeados caso esse diretório não tenha nenhum ficheiroCONTROL
ouvcpkg.json
.
Ao resolver nomes de portas, o primeiro local que contém uma porta de sobreposição correspondente é selecionado.
Usando uma porta de sobreposição
Se uma porta de sobreposição for especificada, primeiro, vcpkg tentará carregar esse diretório como uma porta. Se isso for bem-sucedido, o próprio diretório será tratado como uma porta, e o nome da sobreposição será derivado do arquivo CONTROL
ou vcpkg.json
. Caso contrário, subdiretórios com o nome da porta de sobreposição são considerados.
As portas válidas contêm portfile.cmake
e vcpkg.json
ou CONTROL
.
Por exemplo, considere a seguinte estrutura de diretórios:
-
x/vcpkg.json
, o campo"name"
está definido como"a"
. -
x/portfile.cmake
, as instruções de compilação associadas paraa
. -
x/b/vcpkg.json
, o campo"name"
está definido como"b"
. -
x/b/portfile.cmake
, as instruções de compilação associadas parab
. -
y/c/vcpkg.json
, o campo"name"
está definido como"c"
. -
y/c/portfile.cmake
, as instruções de compilação associadas parac
. -
y/d/vcpkg.json
, o campo"name"
está definido como"d"
. -
y/d/portfile.cmake
, as instruções de compilação associadas parad
.
vcpkg irá considerar as seguintes portas com as configurações seguintes:
-
--overlay-ports=x
: Há uma porta nesta sobreposição,a
. O nome deriva devcpkg.json
. O subdiretóriob
não é considerado. -
--overlay-ports=x/b
: Há uma porta nesta sobreposição,b
. O nome deriva devcpkg.json
. -
--overlay-ports=y
: Há duas portas nesta sobreposição,c
ed
. Seus nomes são derivados dos subdiretórios dey
, e os nomes declarados em seusvcpkg.json
devem corresponder, ou um erro será gerado se vcpkg for solicitado a considerarc
oud
.
Você pode adicionar à configuração da porta de sobreposição de várias maneiras:
- Linha de comando: adicione uma ou mais opções de
--overlay-ports=<directory>
à linha de comando. -
Manifest: Preencha a matriz
"overlay-ports"
novcpkg-configuration.json
. -
Variável ambiental: Defina
VCPKG_OVERLAY_PORTS
para uma lista delimitada de caracteres de caminho.
Exemplo: Exemplo de portas de sobreposição
Dada esta estrutura de diretórios:
O diretório de sobreposição chamado team-ports contém portas sqlite3, rapidjson e curl. O diretório de sobreposição chamado my-ports contém as portas sqlite3 e rapidjson. O diretório vcpkg contém o registro padrão.
Executar:
vcpkg install sqlite3 --overlay-ports=my-ports --overlay-ports=team-ports
Para instalar:
-
sqlite3
demy-ports
Executar:
vcpkg install sqlite3 rapidjson curl \
--overlay-ports=my-ports/rapidjson \
--overlay-ports=vcpkg/ports/curl \
--overlay-ports=team-ports
Para instalar:
-
sqlite3
deteam-ports
-
rapidjson
demy-ports
-
curl
devcpkg/ports
Exemplo: Usando portas de sobreposição para usar uma dependência do gestor de pacotes do sistema
Para usar uma dependência do gerenciador de pacotes do sistema em vez de uma dependência vcpkg, consulte nossa postagem no blog .