Compartir a través de


Puertos de superposición

Normalmente, los puertos vcpkg se obtienen de los registros. Es muy probable que la mayoría de los puertos que instale procedan del registro oficial de vcpkg en https://github.com/Microsoft/vcpkg. vcpkg le permite instalar puertos disponibles a través del sistema de archivos, llamamos a estos puertos, puertos de superposición.

Un puerto de superposición puede actuar como reemplazo de un puerto existente o como puerto nuevo que, de lo contrario, no está disponible en un registro. Al resolver los nombres de paquete, los puertos de superposición tienen prioridad.

Los puertos de superposición se evalúan en el orden siguiente:

  • El directorio especificado en la línea de comandos a través --overlay-portsde , o subdirectorios con nombre si ese directorio no tiene ningún CONTROL archivo o vcpkg.json .
  • Directorio especificado en un vcpkg-configuration.json archivo a través overlay-portsde subdirectorios con nombre o si ese directorio no tiene ningún CONTROL archivo o vcpkg.json .
  • Directorio especificado por VCPKG_OVERLAY_PORTS entradas de variable de entorno o subdirectorios con nombre si ese directorio no tiene ni vcpkg.json CONTROL archivo.

Al resolver nombres de puerto, se selecciona la primera ubicación que contiene un puerto de superposición coincidente.

Uso de un puerto de superposición

Si se especifica un puerto de superposición, en primer lugar, vcpkg intenta cargar ese directorio como puerto. Si se ejecuta correctamente, el propio directorio se trata como un puerto y el nombre de la superposición se deriva del CONTROL archivo o vcpkg.json . De lo contrario, se tienen en cuenta los subdirectorios con el nombre del puerto de superposición.

Los puertos válidos contienen portfile.cmake, y vcpkg.json o CONTROL.

Por ejemplo, considere la siguiente estructura de directorios:

  • x/vcpkg.json, el "name" campo se establece en "a".
  • x/portfile.cmake, las instrucciones de compilación asociadas para a.
  • x/b/vcpkg.json, el "name" campo se establece en "b".
  • x/b/portfile.cmake, las instrucciones de compilación asociadas para b.
  • y/c/vcpkg.json, el "name" campo se establece en "c".
  • y/c/portfile.cmake, las instrucciones de compilación asociadas para c.
  • y/d/vcpkg.json, el "name" campo se establece en "d".
  • y/d/portfile.cmake, las instrucciones de compilación asociadas para d.

vcpkg tendrá en cuenta los siguientes puertos según la siguiente configuración:

  • --overlay-ports=x: hay un puerto en esta superposición, a. El nombre se deriva de vcpkg.json. No se tiene en cuenta el subdirectorio b .
  • --overlay-ports=x/b: hay un puerto en esta superposición, b. El nombre se deriva de vcpkg.json.
  • --overlay-ports=y: hay dos puertos en esta superposición y c d. Sus nombres se derivan de los subdirectorios de yy los nombres declarados en su vcpkg.json deben coincidir, o se generará un error si se pide a vcpkg que considere c o d.

Puede agregar a la configuración del puerto de superposición de varias maneras:

  • Línea de comandos: agregue una o varias --overlay-ports=<directory> opciones a la línea de comandos.
  • Manifiesto: rellene la "overlay-ports" matriz en vcpkg-configuration.json.
  • Variable de entorno: se establece VCPKG_OVERLAY_PORTS en una lista delimitada por caracteres de ruta de acceso.

Ejemplo: Ejemplo de puertos de superposición

Dada esta estructura de directorios:

Ejemplo con varios directorios de puertos de superposición

El directorio de superposición denominado team-ports contiene los puertos sqlite3, rapidjson y curl. El directorio de superposición denominado my-ports contiene los puertos sqlite3 y rapidjson. El directorio vcpkg contiene el registro predeterminado.

Ejecute:

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

Para instalarlo:

  • sqlite3 de my-ports

Ejecute:

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

Para instalarlo:

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

Ejemplo: Uso de puertos de superposición para usar una dependencia del administrador de paquetes del sistema

Para usar una dependencia del administrador de paquetes del sistema sobre una vcpkg, consulte nuestra entrada de blog.