Co to jest tryb manifestu?
Vcpkg ma dwa tryby operacji: tryb klasyczny i tryb manifestu. W przypadku większości użytkowników zalecamy tryb manifestu.
Tryb manifestu używa deklaratywnych plików JSON do opisywania metadanych dotyczących projektu lub pakietu. Pliki manifestu muszą mieć vcpkg.json
nazwę.
Tryb manifestu vcpkg install
jest zaangażowany przez uruchomienie polecenia , gdy plik manifestu (vcpkg.json
) znajduje się w katalogu roboczym. Przeczytaj dalej, aby uzyskać szczegółowe informacje na temat sposobu instalowania pakietów w trybie manifestu.
Tryb manifestu jest również wymagany do korzystania z zaawansowanych funkcji, takich jak przechowywanie wersji i niestandardowe rejestry.
Wszystkie porty vcpkg muszą zawierać vcpkg.json
plik opisujący metadane dotyczące instalowanego pakietu.
Narzędzie vcpkg używa metadanych w manifeście pakietu do różnych celów, takich jak obliczanie drzew zależności, wyszukiwanie pakietów według nazwy lub opisu, rozpoznawanie funkcji itp.
{
"name": "fmt",
"version": "10.1.1",
"description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
"homepage": "https://github.com/fmtlib/fmt",
"license": "MIT",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}
Głównym celem używania pliku manifestu w projekcie jest zadeklarowanie zależności. W przypadku korzystania z manifestu projektu można określić ograniczenia wersji i przesłonięcia, aby zablokować określone wersje zależności. Ta funkcja nie jest dostępna w trybie klasycznym.
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
Narzędzie vcpkg można skonfigurować za pomocą vcpkg-configuration.json
pliku w celu dodania większej liczby rejestrów pakietów lub portów nakładki i lokalizacji potrójnych .
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [
"C:\\dev\\my_vcpkg_ports"
]
}
Aby zainstalować pakiety przy użyciu pliku manifestu vcpkg install
, użyj polecenia bez żadnych argumentów pakietu.
Polecenie musi zostać wykonane z katalogu zawierającego plik manifestu (vcpkg.json
) lub ścieżkę do pliku manifestu dostarczonego --x-manifest-root=<path>
przy użyciu opcji .
Pakiety zainstalowane w trybie manifestu nie zostaną zainstalowane w katalogu globalnym installed
, ponieważ działają w trybie klasycznym. Zamiast tego każdy manifest pobiera własny katalog instalacyjny o nazwie vcpkg_installed
; vcpkg_installed
katalog jest tworzony w tym samym katalogu, który zawiera plik manifestu.
Posiadanie niezależnych drzew instalacyjnych na manifest umożliwia rozdzielenie zależności między różnymi projektami. Pozwala to obejść kluczowe ograniczenie trybu klasycznego, które umożliwia zainstalowanie tylko jednej wersji każdego portu. Tryb manifestu przechowuje wersje portów rozdzielonych dla każdego projektu.
Pliki manifestu mogą definiować addytywne zestawy funkcji, zachowania i zależności za pomocą "funkcji".
W projektach można zdefiniować funkcje umożliwiające włączanie lub wyłączanie zależności, które mają zastosowanie do części projektu. Jeśli na przykład projekt zawiera wiele składników, możesz zachować typowe zależności na "dependencies"
liście, ale ograniczyć inne składniki do odpowiednich składników.
Aby włączyć funkcje projektu, możesz użyć jednej z następujących metod:
--x-feature
Przekaż opcję do poleceniavpckg install
.- W narzędziu CMake ustaw wartość
VCPKG_MANIFEST_FEATURES
przed pierwszym wywołaniem metodyproject()
. - W programie
--x-feature
MSBuild przekaż opcję " VcpkgAdditionalInstallOptions".
{
"name": "my-game",
"dependencies": [ "grpc" ],
"features": {
"client": {
"description": "client game executable",
"dependencies": [ "sdl2", "bullet3" ]
},
"server": {
"description": "multiplayer server executable",
"dependencies": [ "proxygen" ]
},
"tests": {
"description": "development tests",
"dependencies": [ "gtest" ]
}
}
}
Aby skompilować tylko zależności składnika "klient", uruchom polecenie:
vcpkg install --x-feature=client
Poniżej przedstawiono kilka zadań do wypróbowania:
- Ukończ samouczek dotyczący trybu manifestu
- Odczytywanie i
vcpkg.json
vcpkg-configuration.json
artykuły referencyjne. - Blokowanie wersji dla powtarzalnych kompilacji przy użyciu przechowywania wersji
Opinia o produkcie vcpkg
vcpkg to projekt typu open source. Wybierz link, aby przekazać opinię: