Dependencias de host
Las herramientas usadas en tiempo de compilación por otros puertos para generar código o implementar un sistema de compilación personalizado se pueden empaquetar dentro de vcpkg.
Consumo
Al consumir un puerto como herramienta, debe establecer el campo de "host"
la dependencia en true. Por ejemplo:
{
"name": "contoso-http-library",
"version-string": "1.0.0",
"description": "Contoso's http runtime library",
"dependencies": [
"contoso-core-library",
{
"name": "contoso-code-generator",
"host": true
},
{
"name": "contoso-build-system",
"host": true
}
]
}
En este caso, y contoso-code-generator
contoso-build-system
(incluidas las dependencias transitivas) se compilarán e instalarán para el triplete del host antes contoso-http-library
de compilarse.
Nota:
Los consumidores deben usar vcpkg.json
en lugar de CONTROL
como formato de metadatos. Puede convertir fácilmente un archivo existente CONTROL
mediante vcpkg format-manifest /path/to/CONTROL
.
A continuación, dentro del archivo portfile del consumidor (contoso-http-library
en el ejemplo), la variable CURRENT_HOST_INSTALLED_DIR
CMake se definirá en installed/<host-triplet>
y se debe usar para buscar los recursos necesarios. En el ejemplo, contoso-code-generator
podría haber instalado tools/contoso-code-generator/ccg.exe
el consumidor que agregaría a su ruta de acceso local a través de:
# ports/contoso-http-library/portfile.cmake
vcpkg_add_to_path(${CURRENT_HOST_INSTALLED_DIR}/tools/contoso-code-generator)
Especificar el triplete de host
Los tripletes de host predeterminados se eligen en función de la arquitectura del host y del sistema operativo, por ejemplo x64-windows
, , x64-linux
o x64-osx
. Se pueden invalidar a través de:
- En el modo de manifiesto basado en CMake, llamando a
set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
antes de la primeraproject()
directiva - En el modo de manifiesto basado en MSBuild, establezca la propiedad .
VcpkgHostTriplet
- En la línea de comandos, a través de la marca
--host-triplet=...
- La variable de entorno
VCPKG_DEFAULT_HOST_TRIPLET
.
Productor
La producción de una herramienta no tiene requisitos especiales; las herramientas deben crearse como un puerto estándar, siguiendo todas las directivas y prácticas normales. En particular, deben compilarse en TARGET_TRIPLET
, no HOST_TRIPLET
dentro del contexto de su archivo portfile.
Si el contexto actual es la compilación cruzada (TARGET_TRIPLET
no HOST_TRIPLET
es ), VCPKG_CROSSCOMPILING
se establecerá en un valor de verdad.
if(VCPKG_CROSSCOMPILING)
# This is a native build
else()
# This is a cross build
endif()
Puertos de solo host
Algunos puertos solo deben depender de a través de una dependencia de host; Los puertos de script y los puertos de herramientas son ejemplos comunes. En este caso, puede usar la "native"
expresión supports para describir esto. Esto admite expression es true cuando VCPKG_CROSSCOMPILING
es false (lo que implica que TARGET_TRIPLET == HOST_TRIPLET
).
VCPKG_USE_HOST_TOOLS
Establezca esta opción de CMake para agregar ejecutables compilados por vcpkg a CMAKE_PROGRAM_PATH
.
y hacer que estén disponibles durante el proceso de compilación.
Para que esta opción surta efecto, debe establecerse antes de cualquier llamada a project()
en el CMakeLists.txt
archivo. La VCPKG_HOST_TRIPLET
variable también debe establecerse.
Solo se agregan las herramientas instaladas en la tools
carpeta del triplet del host a CMAKE_PROGRAM_PATH
.
De hecho, se agregan las siguientes ubicaciones:
${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools
${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools/*/bin