Ports de superposition
En règle générale, les ports vcpkg sont obtenus à partir de registres. Il est très probable que la plupart des ports que vous installez proviennent du registre vcpkg officiel à https://github.com/Microsoft/vcpkg. vcpkg vous permet d’installer des ports disponibles via le système de fichiers, nous appelons ces ports, ports de superposition.
Un port de superposition peut servir de remplacement de dépôt pour un port existant ou en tant que nouveau port qui n’est pas disponible dans un registre. Lors de la résolution des noms de package, les ports de superposition sont prioritaires.
Les ports de superposition sont évalués dans l’ordre suivant :
- Répertoire spécifié dans la ligne de commande via
--overlay-ports
, ou sous-répertoires nommés si ce répertoire n’a aucunCONTROL
ouvcpkg.json
fichier. - Répertoire spécifié dans un
vcpkg-configuration.json
fichier viaoverlay-ports
, ou sous-répertoires nommés si ce répertoire n’a aucunCONTROL
ouvcpkg.json
fichier. - Répertoire spécifié par
VCPKG_OVERLAY_PORTS
les entrées de variable d’environnement ou sous-répertoires nommés si ce répertoire n’a pas ou n’a pasCONTROL
devcpkg.json
fichier.
Lors de la résolution des noms de ports, le premier emplacement qui contient un port de superposition correspondant est sélectionné.
Utilisation d’un port de superposition
Si un port de superposition est spécifié, tout d’abord, vcpkg tente de charger ce répertoire en tant que port. Si cela réussit, le répertoire lui-même est lui-même traité comme un port, et le nom de la superposition est dérivé du ou vcpkg.json
du CONTROL
fichier. Dans le cas contraire, les sous-répertoires portant le nom du port de superposition sont pris en compte.
Les ports valides contiennent portfile.cmake
, et l’une ou l’autre vcpkg.json
ou CONTROL
.
Par exemple, considérez la structure de répertoires suivante :
x/vcpkg.json
, le"name"
champ est défini sur"a"
.x/portfile.cmake
, instructions de génération associées poura
.x/b/vcpkg.json
, le"name"
champ est défini sur"b"
.x/b/portfile.cmake
, instructions de génération associées pourb
.y/c/vcpkg.json
, le"name"
champ est défini sur"c"
.y/c/portfile.cmake
, instructions de génération associées pourc
.y/d/vcpkg.json
, le"name"
champ est défini sur"d"
.y/d/portfile.cmake
, instructions de génération associées pourd
.
vcpkg prend en compte les ports suivants en fonction des paramètres suivants :
--overlay-ports=x
: Il y a un port dans cette superposition,a
. Le nom est dérivé devcpkg.json
. Le sous-répertoireb
n’est pas pris en compte.--overlay-ports=x/b
: Il y a un port dans cette superposition,b
. Le nom est dérivé devcpkg.json
.--overlay-ports=y
: Il existe deux ports dans cette superposition,c
etd
. Leurs noms sont dérivés des sous-répertoires dey
, et les noms déclarés dans leurvcpkg.json
doit correspondre, ou une erreur est générée si vcpkg est invité à envisagerc
oud
.
Vous pouvez ajouter à la configuration du port de superposition de plusieurs façons :
- Ligne de commande : ajoutez une ou plusieurs
--overlay-ports=<directory>
options à la ligne de commande. - Manifeste : remplir le
"overlay-ports"
tableau dansvcpkg-configuration.json
. - Variable environnementale : définissez
VCPKG_OVERLAY_PORTS
sur une liste délimitée de caractères de chemin d’accès.
Exemple : Exemple de ports de superposition
Étant donné cette structure de répertoires :
Le répertoire de superposition nommé team-ports contient des ports sqlite3, rapidjson et curl. Le répertoire de superposition nommé my-ports contient des ports sqlite3 et rapidjson. Le répertoire vcpkg contient le registre par défaut.
Run :
vcpkg install sqlite3 --overlay-ports=my-ports --overlay-ports=team-ports
Pour effectuer l’installation :
sqlite3
à partir demy-ports
Run :
vcpkg install sqlite3 rapidjson curl
--overlay-ports=my-ports/rapidjson
--overlay-ports=vcpkg/ports/curl
--overlay-ports=team-ports
Pour effectuer l’installation :
sqlite3
à partir deteam-ports
rapidjson
à partir demy-ports
curl
à partir devcpkg/ports
Exemple : Utilisation de ports de superposition pour utiliser une dépendance du gestionnaire de package système
Pour utiliser une dépendance de gestionnaire de package système sur un vcpkg un, reportez-vous à notre billet de blog.