Leer en inglés

Compartir a través de


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-linuxo x64-osx. Se pueden invalidar a través de:

  1. En el modo de manifiesto basado en CMake, llamando a set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "") antes de la primera project() directiva
  2. En el modo de manifiesto basado en MSBuild, establezca la propiedad .VcpkgHostTriplet
  3. En la línea de comandos, a través de la marca --host-triplet=...
  4. 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_TRIPLETes ), 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