Condividi tramite


Dipendenze dell'host

Gli strumenti usati in fase di compilazione da altre porte per generare codice o implementare un sistema di compilazione personalizzato possono essere inseriti in un pacchetto all'interno di vcpkg.

Consumo

Quando si utilizza una porta come strumento, è necessario impostare il campo della "host" dipendenza su true. Ad esempio:

{
    "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
        }
    ]
}

In questo caso, contoso-code-generator e contoso-build-system (incluse le eventuali dipendenze transitive) verranno compilati e installati per il triplo host prima contoso-http-library della compilazione.

Nota

I consumer devono usare vcpkg.json anziché CONTROL come formato di metadati. È possibile convertire facilmente un file esistente CONTROL usando vcpkg format-manifest /path/to/CONTROL.

Quindi, all'interno del file di porta del consumer (contoso-http-library nell'esempio), la variabile CURRENT_HOST_INSTALLED_DIR CMake verrà definita in installed/<host-triplet> e deve essere usata per individuare gli asset necessari. Nell'esempio potrebbe contoso-code-generator essere stato installato tools/contoso-code-generator/ccg.exe il consumer che aggiunge al percorso locale tramite:

# ports/contoso-http-library/portfile.cmake
vcpkg_add_to_path(${CURRENT_HOST_INSTALLED_DIR}/tools/contoso-code-generator)

Specifica del tripletto host

Le triplette host predefinite vengono scelte in base all'architettura host e al sistema operativo, ad esempio x64-windows, x64-linuxo x64-osx. Possono essere sottoposti a override tramite:

  1. In modalità manifesto basata su CMake chiamare set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "") prima della prima project() direttiva
  2. Nella modalità manifesto basata su MSBuild impostare la VcpkgHostTriplet proprietà
  3. Nella riga di comando, tramite il flag --host-triplet=...
  4. La variabile di ambiente VCPKG_DEFAULT_HOST_TRIPLET

Produzione

La produzione di uno strumento non ha requisiti speciali; gli strumenti devono essere creati come porta standard, seguendo tutti i criteri e le procedure normali. In particolare, devono essere compilati in TARGET_TRIPLET, non HOST_TRIPLET all'interno del contesto del file di porta.

Se il contesto corrente esegue la compilazione incrociata (TARGET_TRIPLET non HOST_TRIPLETè ), VCPKG_CROSSCOMPILING verrà impostato su un valore di verità.

if(VCPKG_CROSSCOMPILING)
    # This is a native build
else()
    # This is a cross build
endif()

Porte solo host

Alcune porte devono essere dipendenti solo da una dipendenza host; porte script e porte degli strumenti sono esempi comuni. In questo caso, è possibile usare l'espressione "native" supports per descriverlo. Questo supporta l'espressione è true quando VCPKG_CROSSCOMPILING è false (implicando che TARGET_TRIPLET == HOST_TRIPLET).

VCPKG_USE_HOST_TOOLS

Impostare questa opzione CMake per aggiungere file eseguibili compilati da vcpkg a CMAKE_PROGRAM_PATH. e renderli disponibili durante il processo di compilazione.

Per rendere effettiva questa opzione, è necessario impostarla prima di qualsiasi chiamata a project() nel CMakeLists.txt file. La VCPKG_HOST_TRIPLET variabile deve essere impostata anche.

Solo gli strumenti installati nella tools cartella per il triplet host vengono aggiunti a CMAKE_PROGRAM_PATH. In effetti, vengono aggiunte le posizioni seguenti:

  • ${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools
  • ${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools/*/bin