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-ports
de , o subdirectorios con nombre si ese directorio no tiene ningúnCONTROL
archivo ovcpkg.json
. - Directorio especificado en un
vcpkg-configuration.json
archivo a travésoverlay-ports
de subdirectorios con nombre o si ese directorio no tiene ningúnCONTROL
archivo ovcpkg.json
. - Directorio especificado por
VCPKG_OVERLAY_PORTS
entradas de variable de entorno o subdirectorios con nombre si ese directorio no tiene nivcpkg.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 paraa
.x/b/vcpkg.json
, el"name"
campo se establece en"b"
.x/b/portfile.cmake
, las instrucciones de compilación asociadas parab
.y/c/vcpkg.json
, el"name"
campo se establece en"c"
.y/c/portfile.cmake
, las instrucciones de compilación asociadas parac
.y/d/vcpkg.json
, el"name"
campo se establece en"d"
.y/d/portfile.cmake
, las instrucciones de compilación asociadas parad
.
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 devcpkg.json
. No se tiene en cuenta el subdirectoriob
.--overlay-ports=x/b
: hay un puerto en esta superposición,b
. El nombre se deriva devcpkg.json
.--overlay-ports=y
: hay dos puertos en esta superposición yc
d
. Sus nombres se derivan de los subdirectorios dey
y los nombres declarados en suvcpkg.json
deben coincidir, o se generará un error si se pide a vcpkg que considerec
od
.
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 envcpkg-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:
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
demy-ports
Ejecute:
vcpkg install sqlite3 rapidjson curl
--overlay-ports=my-ports/rapidjson
--overlay-ports=vcpkg/ports/curl
--overlay-ports=team-ports
Para instalarlo:
sqlite3
deteam-ports
rapidjson
demy-ports
curl
devcpkg/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.