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 nenhumCONTROL
arquivo orvcpkg.json
. - O diretório especificado em um
vcpkg-configuration.json
arquivo viaoverlay-ports
, ou subdiretórios nomeados se esse diretório não tiver nenhumCONTROL
arquivo orvcpkg.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 nenhumCONTROL
arquivo 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, 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 paraa
.x/b/vcpkg.json
, o"name"
campo é definido como"b"
.x/b/portfile.cmake
, as instruções de compilação associadas parab
.y/c/vcpkg.json
, o"name"
campo é definido como"c"
.y/c/portfile.cmake
, as instruções de compilação associadas parac
.y/d/vcpkg.json
, o"name"
campo é definido como"d"
.y/d/portfile.cmake
, as instruções de compilação associadas parad
.
O vcpkg considerará as seguintes portas, dadas as seguintes configurações:
--overlay-ports=x
: Há uma porta nesta sobreposição,a
. O nome é derivado devcpkg.json
. O subdiretóriob
não é considerado.--overlay-ports=x/b
: Há uma porta nesta sobreposição,b
. O nome é derivado devcpkg.json
.--overlay-ports=y
: Há duas portas nesta sobreposiçãoc
ed
. Seus nomes são derivados dos subdiretórios de , e os nomes declaradosy
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
--overlay-ports=<directory>
opções à linha de comando. - Manifesto: Preencha a
"overlay-ports"
matriz novcpkg-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:
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
demy-ports
Correr:
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 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.