Co je režim manifestu?

Vcpkg má dva režimy operací: klasický režim a režim manifestu. Pro většinu uživatelů jsme recommned režim manifestu.

Režim manifestu používá deklarativní soubory JSON k popisu metadat o projektu nebo balíčku. V každém případě je vcpkg.jsonnázev tohoto souboru .

Režim manifestu vcpkg install je zapojen spuštěním příkazu, zatímco v pracovním adresáři je soubor manifestu (vcpkg.json). Přečtěte si podrobnosti o tom, jak nainstalovat balíčky v režimu manifestu.

K používání pokročilých funkcí, jako je správa verzí a vlastní registry, se vyžaduje také režim manifestu.

Soubory manifestu na portech

Všechny porty vcpkg musí obsahovat vcpkg.json soubor, který popisuje metadata o balíčku, který instalují.

Vcpkg používá metadata v manifestu balíčku pro různé účely, jako je výpočet stromů závislostí, vyhledávání balíčků podle názvu nebo popisu, překlad funkcí atd.

Příklad manifestu balíčku

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

Soubory manifestu v projektech

Hlavním účelem použití souboru manifestu v projektu je deklarovat závislosti. Při použití manifestu projektu můžete určit omezení verzí a přepsání zamknout konkrétní verze závislostí. Tato funkce není dostupná v klasickém režimu.

Příklad manifestu projektu

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

Konfigurační soubor

Vcpkg lze nakonfigurovat prostřednictvím vcpkg-configuration.json souboru pro přidání dalších registrů balíčků nebo překryvných portů a trojitých umístění.

Příklad konfiguračního souboru

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

Instalace balíčků v režimu manifestu

K instalaci balíčků pomocí souboru manifestu vcpkg install použijete příkaz bez argumentů balíčku. Příkaz musí být proveden z adresáře obsahujícího soubor manifestu (vcpkg.json) nebo cesty k souboru manifestu poskytnutému --x-manifest-root=<path> pomocí této možnosti.

Balíčky nainstalované v režimu manifestu se nenainstalují v globálním installed adresáři, jak to dělají v klasickém režimu. Místo toho každý manifest získá vlastní instalační adresář s názvem vcpkg_installed; vcpkg_installed adresář se vytvoří ve stejném adresáři, který obsahuje soubor manifestu.

Samostatné instalační stromy na manifest umožňují oddělení závislostí mezi různými projekty. Tím se obchází zásadní omezení klasického režimu, které umožňuje instalaci pouze jedné verze každého portu. Režim manifestu uchovává verze portů oddělených pro každý projekt.

Použití funkcí v manifestech projektu

Soubory manifestu mohou definovat doplňkové sady funkcí, chování a závislostí prostřednictvím použití "funkcí".

V projektech můžete definovat funkce pro povolení nebo zakázání závislostí, které se vztahují na části projektu. Pokud například projekt obsahuje více součástí, můžete chtít zachovat společné závislosti v "dependencies" seznamu, ale některé jiné omezit na jejich příslušné součásti.

Pokud chcete povolit funkce projektu, můžete použít jednu z následujících metod:

Příklad: Funkce v manifestech 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" ]
    }
  }
} 

Spuštění pouze závislostí komponenty klienta:

vcpkg install --x-feature=client

Další kroky

Tady je několik úkolů, které můžete vyzkoušet dál: