Partilhar via


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 arquivo CONTROL ou vcpkg.json.
  • O diretório especificado através do overlay-portsno arquivo vcpkg-configuration.json, ou subdiretórios designados se esse diretório não tiver o arquivo CONTROL ou vcpkg.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 ficheiro CONTROL ou vcpkg.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.cmakee 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 para a.
  • x/b/vcpkg.json, o campo "name" está definido como "b".
  • x/b/portfile.cmake, as instruções de compilação associadas para b.
  • y/c/vcpkg.json, o campo "name" está definido como "c".
  • y/c/portfile.cmake, as instruções de compilação associadas para c.
  • y/d/vcpkg.json, o campo "name" está definido como "d".
  • y/d/portfile.cmake, as instruções de compilação associadas para d.

vcpkg irá considerar as seguintes portas com as configurações seguintes:

  • --overlay-ports=x: Há uma porta nesta sobreposição, a. O nome deriva de vcpkg.json. O subdiretório b não é considerado.
  • --overlay-ports=x/b: Há uma porta nesta sobreposição, b. O nome deriva de vcpkg.json.
  • --overlay-ports=y: Há duas portas nesta sobreposição, c e d. Seus nomes são derivados dos subdiretórios de y, e os nomes declarados em seus vcpkg.json devem corresponder, ou um erro será gerado se vcpkg for solicitado a considerar c ou d.

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" no vcpkg-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:

Exemplo com vários diretórios de portas sobrepostas

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 de my-ports

Executar:

vcpkg install sqlite3 rapidjson curl \
    --overlay-ports=my-ports/rapidjson \
    --overlay-ports=vcpkg/ports/curl \
    --overlay-ports=team-ports

Para instalar:

  • sqlite3 de team-ports
  • rapidjson de my-ports
  • curl de vcpkg/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 .