Kurz: Instalace závislosti ze souboru manifestu

Vcpkg má dva režimy operací: klasický režim a režim manifestu. Tento článek popisuje, jak nainstalovat balíčky pomocí režimu manifestu, což je doporučený pracovní postup pro většinu uživatelů.

V režimu manifestu deklarujete přímé závislosti projektu v souboru manifestu s názvem vcpkg.json.

Soubory manifestu mají svůj vlastní vcpkg_installed adresář, kde instalují závislosti, na rozdíl od klasického režimu, kde jsou všechny balíčky nainstalovány v běžném %VCPKG_ROOT%/installed adresáři. Každý projekt proto může mít svůj vlastní manifest a vlastní sadu závislostí, které nejsou v konfliktu se závislostmi jiných projektů.

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

V tomto kurzu se naučíte, jak:

Požadavky

  • vcpkg
  • Terminál
  • Editor kódu
  • Kompilátor C++
  • (Volitelné) CMake nebo MSBuild

1. Vytvoření projektu s manifestem

V nové složce vytvořte zdrojový soubor s názvem main.cxx s těmito obsahy:

#include <cxxopts.hpp>
#include <fmt/format.h>
#include <range/v3/view.hpp>

namespace view = ranges::views;

int fib(int x)
{
  int a = 0, b = 1;

  for (int it : view::repeat(0) | view::take(x))
  {
    (void)it;
    int tmp = a;
    a += b;
    b = tmp;
  }

  return a;
}

int main(int argc, char **argv)
{
  cxxopts::Options options("fibo", "Print the fibonacci sequence up to a value 'n'");
  options.add_options()("n,value", "The value to print to", cxxopts::value<int>()->default_value("10"));

  auto result = options.parse(argc, argv);
  auto n = result["value"].as<int>();

  for (int x : view::iota(1) | view::take(n))
  {
    fmt::print("fib({}) = {}\n", x, fib(x));
  }
}

Kód odkazuje na opensourcové knihovny: cxxopts, fmta range-v3; které jsou k dispozici ve veřejném registru vcpkg na adrese https://github.com/Microsoft/vcpkg.

Pokud chcete deklarovat tyto závislosti, vytvořte soubor pojmenovaný vcpkg.json ve stejném adresáři jako váš projekt:

vcpkg.json:

{
  "dependencies": [
    "cxxopts",
    "fmt",
    "range-v3"
  ]
}

V seznamu stačí zadat jenom přímé závislosti "dependencies" . Když se spustí, vcpkg přeloží a nainstaluje všechny požadované přechodné závislosti.

2. Integrace vcpkg s buildovým systémem

V tomto kroku vám ukážeme, jak integrovat vcpkg s CMake nebo MSBuild, aby se závislosti projektu automaticky nainstalovaly nebo obnovily při každém sestavení projektu.

Pokud používáte jiný systém sestavení, přejděte k dalšímu kroku: Nainstalujte závislosti.

Pokud chcete v projektech MSBuild použít vcpkg, spusťte následující příkaz:

vcpkg integrate install

Příkaz je potřeba spustit vcpkg integrate install jenom při prvním povolení integrace nástroje MSBuild. To umožňuje integraci nástroje MSBuild pro všechny vaše stávající a budoucí projekty. Slouží vcpkg integrate remove k odebrání systémové integrace nástroje MSBuild.

Tato metoda integrace automaticky přidá balíčky nainstalované vcpkg do následujících vlastností projektu: Include Directories, Link Directoriesa Link Libraries. Kromě toho se vytvoří akce po sestavení, která zajistí, že se všechny požadované knihovny DLL zkopírují do výstupní složky sestavení. To funguje pro všechna řešení a projekty pomocí sady Visual Studio 2015 nebo novější.

3. Instalace závislostí

Pokud používáte CMake nebo MSBuild a postupujete podle předchozího kroku, můžete přeskočit k dalšímu kroku: Sestavení projektu.

Pokud používáte jiný systém sestavení nebo chcete závislosti nainstalovat ručně, stačí spustit vše, co musíte udělat vcpkg install v adresáři obsahujícím váš soubor manifestu.

PS D:\projects\manifest-example> vcpkg install
Detecting compiler hash for triplet x64-windows...
The following packages will be built and installed:
    cxxopts:x64-windows -> 3.1.1
    fmt:x64-windows -> 10.0.0
    range-v3:x64-windows -> 0.12.0#1
  * vcpkg-cmake:x64-windows -> 2023-05-04
  * vcpkg-cmake-config:x64-windows -> 2022-02-06#1
Additional packages (*) will be modified to complete this operation.
Installing 1/5 vcpkg-cmake-config:x64-windows...
Installing 2/5 vcpkg-cmake:x64-windows...
Installing 3/5 cxxopts:x64-windows...
Installing 4/5 fmt:x64-windows...
Installing 5/5 range-v3:x64-windows...
Total install time: 48 s
cxxopts provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(cxxopts CONFIG REQUIRED)
    target_link_libraries(main PRIVATE cxxopts::cxxopts)

The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

range-v3 provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(range-v3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE range-v3::meta range-v3::concepts range-v3::range-v3)

Po dokončení příkazu budou všechny sestavené balíčky přítomny v vcpkg_installed adresáři. Konkrétní umístění tohoto adresáře závisí na vašem systému sestavení; obvykle uvnitř výchozí výstupní složky systému sestavení nebo vedle souboru vcpkg.json .

4. Sestavení projektu

Ve výchozím nastavení je režim manifestu v projektech MSBuild zakázán.

Pokud chcete v projektu povolit manifesty, nastavte VcpkgEnableManifest vlastnost v .vcxproj souboru:

<PropertyGroup Label="Vcpkg">
  <VcpkgEnableManifest>true</VcpkgEnableManifest>
</PropertyGroup>

Případně můžete ve volání MSBuild povolit režim manifestu předáním msbuild /p:VcpkgEnableManifest=true jako parametru.

PS D:\projects\manifest-example> msbuild /p:VcpkgEnableManifest=true
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/11/2023 11:29:50 AM.

Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|x64".
Project "D:\projects\manifest-example\manifest-example.sln" (1) is building "D:\projects\manifest-example\manifest-example.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
  (omitted)
InitializeBuildStatus:
  (omitted)
ComputeStdModulesCompileInputs:
  (omitted)
SetModuleDependencies:
  Creating directory "x64\Debug\manifest.ceffc6eb_MD.tlog\".
VcpkgTripletSelection:
  Using triplet "x64-windows" from "D:\projects\manifest-example\vcpkg_installed\x64-windows\x64-windows\"
  Using normalized configuration "Debug"
VcpkgInstallManifestDependencies:
  Installing vcpkg dependencies to D:\projects\manifest-example\vcpkg_installed\x64-windows\
  Creating directory "D:\projects\manifest-example\vcpkg_installed\x64-windows\".
  "D:\vcpkg\vcpkg.exe" install  --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "D:\vcpkg\" "--x-manifest-root=D:\projects\manifest-example\" "--x-install-root=D:\projects\manifest-example\vcpkg_installed\x64-windows\"
  "D:\vcpkg\vcpkg.exe" install  --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "D:\vcpkg\" "--x-manifest-root=D:\projects\manifest-example\" "--x-install-root=D:\projects\manifest-example\vcpkg_installed\x64-windows\"
  Detecting compiler hash for triplet x64-windows...
  The following packages will be built and installed:
      cxxopts:x64-windows -> 3.1.1
      fmt:x64-windows -> 10.0.0
      range-v3:x64-windows -> 0.12.0#1
    * vcpkg-cmake:x64-windows -> 2023-05-04
    * vcpkg-cmake-config:x64-windows -> 2022-02-06#1
  (omitted)
ClCompile:
  (omitted)
Link:
  (omitted)
AppLocalFromInstalled:
  pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manif
  est-mode-msbuild\x64\Debug\manifest-example.exe" "D:\projects\manifest-example\vcpkg_installed\x64-windows\x64-windows\debug\bin"
  "x64\Debug\manifest.ceffc6eb.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
  D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
  (omitted)
Done Building Project "D:\projects\manifest-example\manifest-example.vcxproj" (default targets).

Done Building Project "D:\projects\manifest-example\manifest-example.sln" (default targets).

Build succeeded.

Další kroky

V této příručce jste nainstalovali závislosti pro jednoduchý projekt pomocí souboru manifestu.

Tady je několik dalších úkolů, které můžete vyzkoušet:

  • Instalace balíčků pro vlastní platformy, kompilátory nebo architektury sestavení pomocí tripletů
  • Uzamčení verzí pro opakovatelné buildy pomocí správy verzí
  • Opakované použití binárních binárních souborů napříč místními nebo průběžnými spuštěními integrace s využitím binární mezipaměti
  • Správa privátních knihoven pomocí vlastních registrů