Co to jest tryb manifestu?

Vcpkg ma dwa tryby operacji: tryb klasyczny i tryb manifestu. W przypadku większości użytkowników ponownie zostanie wyświetlony tryb manifestu.

Tryb manifestu używa deklaratywnych plików JSON do opisywania metadanych dotyczących projektu lub pakietu. W każdym razie nazwa tego pliku to vcpkg.json.

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.

Pliki manifestu w portach

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.

Przykład manifestu pakietu

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

Pliki manifestu w projektach

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.

Przykład manifestu projektu

{
  "dependencies": [ "fmt", "zlib" ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { "name": "zlib", "version": "1.2.8" }
  ]
}

Plik konfiguracji

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 .

Przykład pliku konfiguracji

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/northwindtraders/vcpkg-registry",
      "baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
      "packages": [ "beicode", "beison" ]
    }
  ],
  "overlay-ports": [
    "C:\\dev\\my_vcpkg_ports"
  ]
}

Instalowanie pakietów w trybie manifestu

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.

Używanie funkcji w manifestach 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:

Przykład: funkcje w manifestach projektu

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

Następne kroki

Poniżej przedstawiono kilka zadań do wypróbowania: