Delen via


Overlaypoorten

Meestal worden vcpkg-poorten verkregen uit registers. Het is zeer waarschijnlijk dat de meeste poorten die u installeert afkomstig zijn van het officiële vcpkg-register op https://github.com/Microsoft/vcpkg. met vcpkg kunt u poorten installeren die voor u beschikbaar zijn via het bestandssysteem, we noemen deze poorten, overlaypoorten.

Een overlay-poort kan dienen als vervanging voor een bestaande poort, of als een nieuwe poort die anders niet beschikbaar is in een register. Bij het oplossen van pakketnamen, krijgen overlaypoorten voorrang.

Overlay-poorten worden in deze volgorde geëvalueerd:

  • De map die is opgegeven in de opdrachtregel via --overlay-ports, of eventuele submappen, als die map geen CONTROL- of vcpkg.json-bestand bevat.
  • De map die is opgegeven in een vcpkg-configuration.json-bestand via overlay-portsof benoemde submappen als die map geen CONTROL of vcpkg.json bestand heeft.
  • De map die is opgegeven door VCPKG_OVERLAY_PORTS vermeldingen van omgevingsvariabelen of benoemde submappen als die map geen CONTROL of vcpkg.json bestand heeft.

Bij het omzetten van poortnamen wordt de eerste locatie met een overeenkomende overlaypoort geselecteerd.

Een overlaypoort gebruiken

Als er een overlaypoort is opgegeven, probeert vcpkg eerst die map als poort te laden. Als dat lukt, wordt de map zelf behandeld als een poort en wordt de naam van de overlay afgeleid van het CONTROL- of vcpkg.json-bestand. Anders worden submappen die de naam van de overlaypoort hebben overwogen.

Geldige poorten bevatten portfile.cmakeen óf vcpkg.json óf CONTROL.

Denk bijvoorbeeld aan de volgende mapstructuur:

  • x/vcpkg.jsonwordt het veld "name" ingesteld op "a".
  • x/portfile.cmake, de bijbehorende build-instructies voor a.
  • Het veld "name" in x/b/vcpkg.jsonis ingesteld op "b".
  • x/b/portfile.cmake, de bijbehorende build-instructies voor b.
  • y/c/vcpkg.jsonwordt het veld "name" ingesteld op "c".
  • y/c/portfile.cmake, de bijbehorende build-instructies voor c.
  • y/d/vcpkg.jsonwordt het veld "name" ingesteld op "d".
  • y/d/portfile.cmake, de bijbehorende build-instructies voor d.

vcpkg houdt rekening met de volgende poorten met de volgende instellingen:

  • --overlay-ports=x: er is één poort in deze overlay, a. De naam is afgeleid van vcpkg.json. De submap b wordt niet meegerekend.
  • --overlay-ports=x/b: er is één poort in deze overlay, b. De naam is afgeleid van vcpkg.json.
  • --overlay-ports=y: er bevinden zich twee poorten in deze overlay, c en d. Hun namen worden afgeleid van de submappen van yen de namen die in hun vcpkg.json zijn gedeclareerd, moeten overeenkomen, of er wordt een fout gegenereerd als vcpkg wordt gevraagd c of dte overwegen.

U kunt op verschillende manieren toevoegen aan de configuratie van de overlaypoort:

  • Opdrachtregel: voeg een of meer --overlay-ports=<directory> opties toe aan de opdrachtregel.
  • manifest: vul de "overlay-ports" matrix in vcpkg-configuration.json.
  • Omgevingsvariabele: stel VCPKG_OVERLAY_PORTS in op een door tekens gescheiden padlijst.

Voorbeeld: Overlay-poorten voorbeeld

Met de volgende mapstructuur:

voorbeeld met meerdere overlay-poortdirectories

Overlay-directory genaamd team-ports bevat de poorten sqlite3, rapidjson en curl. Overlay-map met de naam my-ports bevat poorten sqlite3 en rapidjson. De vcpkg-map bevat het standaardregister.

Rennen:

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

Installeren:

  • sqlite3 van my-ports

Rennen:

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

Installeren:

  • sqlite3 van team-ports
  • rapidjson van my-ports
  • curl van vcpkg/ports

Voorbeeld: Het gebruik van overlaypoorten om een afhankelijkheid van een systeem pakketbeheerder te gebruiken

Raadpleeg onze blogpostals u wilt kiezen voor een afhankelijkheid van een system package manager in plaats van een vcpkg-afhankelijkheid.