Share via


Hostabhängigkeiten

Tools, die zur Erstellungszeit von anderen Ports verwendet werden, um Code zu generieren oder ein benutzerdefiniertes Buildsystem zu implementieren, können in vcpkg verpackt werden.

Verbrauch

Wenn Sie einen Port als Tool verwenden, müssen Sie das Feld der "host" Abhängigkeit auf "true" festlegen. Beispiel:

{
    "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 diesem Fall werden die contoso-code-generator und contoso-build-system (einschließlich aller transitiven Abhängigkeiten) für das Host-Triplet erstellt und installiert, bevor contoso-http-library sie erstellt wird.

Hinweis

Verbraucher müssen anstelle ihres Metadatenformats CONTROL verwendenvcpkg.json. Sie können eine vorhandene CONTROL Datei ganz einfach mithilfe von vcpkg format-manifest /path/to/CONTROL.

Anschließend wird innerhalb der Portdatei des Consumers (contoso-http-library im Beispiel) die CMake-Variable CURRENT_HOST_INSTALLED_DIR definiert installed/<host-triplet> und sollte verwendet werden, um alle erforderlichen Ressourcen zu finden. In dem Beispiel könnte installiert tools/contoso-code-generator/ccg.exe sein, contoso-code-generator welches der Consumer zu seinem lokalen Pfad hinzufügen würde:

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

Angeben des Host-Triplets

Die Standardmäßigen Host-Triplets werden basierend auf der Hostarchitektur und dem Betriebssystem ausgewählt, z x64-windows. B. , x64-linuxoder x64-osx. Sie können überschrieben werden über:

  1. Rufen Sie set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "") im CMake-basierten Manifestmodus vor der ersten project() Direktive auf.
  2. Festlegen der VcpkgHostTriplet Eigenschaft im MSBuild-basierten Manifestmodus
  3. Über die Kennzeichnung in der Befehlszeile --host-triplet=...
  4. Die VCPKG_DEFAULT_HOST_TRIPLET-Umgebungsvariable

Produzieren

Die Herstellung eines Werkzeugs hat keine besonderen Anforderungen; Tools sollten als Standardport erstellt werden, wobei alle normalen Richtlinien und Methoden gelten. Insbesondere sollten sie im Kontext ihrer Portdatei gegeneinander TARGET_TRIPLETHOST_TRIPLET aufbauen.

Wenn der aktuelle Kontext kompiliert wird (TARGET_TRIPLET ist nicht HOST_TRIPLET), VCPKG_CROSSCOMPILING wird auf einen Wahrheitswert festgelegt.

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

Nur Hostports

Einige Ports sollten nur über eine Hostabhängigkeit abhängig sein; Skriptports und Toolports sind häufige Beispiele. In diesem Fall können Sie den "native" unterstützten Ausdruck verwenden, um dies zu beschreiben. Dieser Ausdruck wird unterstützt, wenn VCPKG_CROSSCOMPILING falsch ist (implizierend das TARGET_TRIPLET == HOST_TRIPLET).