Udostępnij za pośrednictwem


Zależności hosta

Narzędzia używane w czasie kompilacji przez inne porty do generowania kodu lub implementowania niestandardowego systemu kompilacji można spakować wewnątrz programu vcpkg.

Spożywanie

W przypadku korzystania z portu jako narzędzia należy ustawić pole zależności "host" na wartość true. Na przykład:

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

W takim przypadku contoso-code-generator elementy i contoso-build-system (w tym wszelkie zależności przechodnie) zostaną skompilowane i zainstalowane dla triplet hosta przed contoso-http-library kompilacją.

Uwaga

Użytkownicy muszą używać vcpkg.json zamiast CONTROL jako formatu metadanych. Istniejący CONTROL plik można łatwo przekonwertować przy użyciu polecenia vcpkg format-manifest /path/to/CONTROL.

Następnie w pliku portfile odbiorcy (contoso-http-library w przykładzie) zmienna CURRENT_HOST_INSTALLED_DIR CMake zostanie zdefiniowana installed/<host-triplet> i powinna służyć do lokalizowania wszelkich wymaganych zasobów. W tym przykładzie contoso-code-generator może być tools/contoso-code-generator/ccg.exe zainstalowane, które odbiorca doda do ścieżki lokalnej za pośrednictwem:

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

Określanie trójki hostów

Domyślne trójkropki hosta są wybierane na podstawie architektury hosta i systemu operacyjnego, na przykład x64-windows, x64-linuxlub x64-osx. Można je przesłonić za pomocą:

  1. W trybie manifestu opartym na narzędziu CMake wywoływanie set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "") przed pierwszą project() dyrektywą
  2. W trybie manifestu VcpkgHostTriplet opartym na programie MSBuild ustawienie właściwości
  3. W wierszu polecenia za pomocą flagi --host-triplet=...
  4. Zmienna środowiskowa VCPKG_DEFAULT_HOST_TRIPLET

Produkcji

Tworzenie narzędzia nie ma specjalnych wymagań; narzędzia powinny być tworzone jako standardowy port, zgodnie ze wszystkimi normalnymi zasadami i praktykami. W szczególności powinny one opierać się na TARGET_TRIPLETelementach , a nie HOST_TRIPLET w kontekście ich pliku portfile.

Jeśli bieżący kontekst jest kompilowanie krzyżowe (TARGET_TRIPLET nie HOST_TRIPLETjest ), VCPKG_CROSSCOMPILING zostanie ustawiony na wartość prawda.

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

Porty tylko dla hosta

Niektóre porty powinny być zależne tylko od zależności hosta; Porty skryptu i porty narzędzi są typowymi przykładami. W tym przypadku możesz użyć "native" wyrażenia supports, aby to opisać. Obsługuje to wyrażenie ma wartość true, gdy VCPKG_CROSSCOMPILING ma wartość false (co oznacza, że TARGET_TRIPLET == HOST_TRIPLET).

VCPKG_USE_HOST_TOOLS

Ustaw tę opcję narzędzia CMake, aby dodać pliki wykonywalne skompilowane przez narzędzie vcpkg na .CMAKE_PROGRAM_PATH i udostępnij je podczas procesu kompilacji.

Aby ta opcja weszła w życie, należy ją ustawić przed każdym wywołaniem project() elementu w CMakeLists.txt pliku. Należy również ustawić zmienną VCPKG_HOST_TRIPLET .

Do folderu są dodawane CMAKE_PROGRAM_PATHtylko narzędzia zainstalowane w tools folderze triplet hosta. W rzeczywistości dodawane są następujące lokalizacje:

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