Partager via


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 aucun CONTROL ou vcpkg.json fichier.
  • Répertoire spécifié dans un vcpkg-configuration.json fichier via overlay-ports, ou sous-répertoires nommés si ce répertoire n’a aucun CONTROL ou vcpkg.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 pas CONTROL de vcpkg.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 pour a.
  • x/b/vcpkg.json, le "name" champ est défini sur "b".
  • x/b/portfile.cmake, instructions de génération associées pour b.
  • y/c/vcpkg.json, le "name" champ est défini sur "c".
  • y/c/portfile.cmake, instructions de génération associées pour c.
  • y/d/vcpkg.json, le "name" champ est défini sur "d".
  • y/d/portfile.cmake, instructions de génération associées pour d.

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é de vcpkg.json. Le sous-répertoire b n’est pas pris en compte.
  • --overlay-ports=x/b: Il y a un port dans cette superposition, b. Le nom est dérivé de vcpkg.json.
  • --overlay-ports=y: Il existe deux ports dans cette superposition, c et d. Leurs noms sont dérivés des sous-répertoires de y, et les noms déclarés dans leur vcpkg.json doit correspondre, ou une erreur est générée si vcpkg est invité à envisager c ou d.

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 dans vcpkg-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 :

Exemple avec plusieurs répertoires de ports de superposition

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