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-linux
lub x64-osx
. Można je przesłonić za pomocą:
- W trybie manifestu opartym na narzędziu CMake wywoływanie
set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
przed pierwsząproject()
dyrektywą - W trybie manifestu
VcpkgHostTriplet
opartym na programie MSBuild ustawienie właściwości - W wierszu polecenia za pomocą flagi
--host-triplet=...
- 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_TRIPLET
elementach , a nie HOST_TRIPLET
w kontekście ich pliku portfile.
Jeśli bieżący kontekst jest kompilowanie krzyżowe (TARGET_TRIPLET
nie HOST_TRIPLET
jest ), 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_PATH
tylko 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