Compartilhar via


Portas de sobreposição

Normalmente, as portas vcpkg são obtidas de registros. É muito provável que a maioria dos ports que você instala venha do registro oficial do vcpkg em https://github.com/Microsoft/vcpkg. O vcpkg permite que você instale os ports disponíveis para você através do sistema de arquivos, chamamos esses ports de portas de sobreposição.

Uma porta de sobreposição pode atuar como uma substituição imediata para uma porta existente ou como uma nova porta que, de outra forma, não está disponível em um registro. Ao 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 CONTROL arquivo or vcpkg.json .
  • O diretório especificado em um vcpkg-configuration.json arquivo via overlay-ports, ou subdiretórios nomeados se esse diretório não tiver nenhum CONTROL arquivo or vcpkg.json .
  • O diretório especificado por VCPKG_OVERLAY_PORTS entradas de variáveis de ambiente ou subdiretórios nomeados se esse diretório não tiver nenhum CONTROL arquivo 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, o 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 CONTROL arquivo or vcpkg.json . Caso contrário, os subdiretórios com o nome da porta de sobreposição serão considerados.

As portas válidas contêm portfile.cmake, e ou vcpkg.json .CONTROL

Por exemplo, considere a seguinte estrutura de diretório:

  • x/vcpkg.json, o "name" campo é definido como "a".
  • x/portfile.cmake, as instruções de compilação associadas para a.
  • x/b/vcpkg.json, o "name" campo é definido como "b".
  • x/b/portfile.cmake, as instruções de compilação associadas para b.
  • y/c/vcpkg.json, o "name" campo é definido como "c".
  • y/c/portfile.cmake, as instruções de compilação associadas para c.
  • y/d/vcpkg.json, o "name" campo é definido como "d".
  • y/d/portfile.cmake, as instruções de compilação associadas para d.

O vcpkg considerará as seguintes portas, dadas as seguintes configurações:

  • --overlay-ports=x: Há uma porta nesta sobreposição, a. O nome é derivado de vcpkg.json. O subdiretório b não é considerado.
  • --overlay-ports=x/b: Há uma porta nesta sobreposição, b. O nome é derivado de vcpkg.json.
  • --overlay-ports=y: Há duas portas nesta sobreposição c e d. Seus nomes são derivados dos subdiretórios de , e os nomes declarados yem 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 --overlay-ports=<directory> opções à linha de comando.
  • Manifesto: Preencha a "overlay-ports" matriz no vcpkg-configuration.json.
  • Variável de ambiente: Defina VCPKG_OVERLAY_PORTS como uma lista delimitada por caracteres de caminho.

Exemplo: Exemplo de portas de sobreposição

Dada esta estrutura de diretório:

Exemplo com vários diretórios de portas de sobreposição

O diretório de sobreposição chamado team-ports contém as 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.

Correr:

vcpkg install sqlite3 --overlay-ports=my-ports --overlay-ports=team-ports

Para instalar:

  • sqlite3 de my-ports

Correr:

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 gerenciador de pacotes do sistema

Para usar uma dependência do gerenciador de pacotes do sistema em vez de uma vcpkg, consulte nossa postagem no blog.