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.
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)
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
.
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()
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
).
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
Comentarios de vcpkg
vcpkg es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: