Kurz: Instalace závislosti z příkazového řádku

Tip

V části Instalace závislosti ze souboru manifestu najdete doporučenou metodu instalace závislostí.

Upozorňující

Některé funkce vcpkg nejsou dostupné v klasickém režimu.

Vcpkg má dva režimy operací: klasický režim a režim manifestu. Tento článek popisuje, jak nainstalovat balíčky pomocí klasického režimu. Pro většinu uživatelů doporučujeme místo toho používat režim manifestu.

V klasickém režimu použijete vcpkg jako rozhraní příkazového řádku k instalaci závislostí do společného instalačního adresáře. Obvykle se nachází v %VCPKG_ROOT%/installedumístění , kde %VCPKG_ROOT% je instalační adresář vcpkg.

V tomto kurzu se naučíte:

Požadavky

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

1. Vytvoření projektu

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.

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í

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

K instalaci těchto balíčků použijte vcpkg install příkaz.

vcpkg install cxxopts fmt range-v3
$ ./vcpkg install cxxopts fmt range-v3
Computing installation plan...
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.
(omitted)
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)

4. Sestavení projektu

Důležité

Ujistěte se, že trojití nainstalovaných balíčků odpovídá konfiguraci projektu. Používejte x64-windows nebo x64-windows-static pro 64bitové projekty nebo x86-windowsx86-windows-static pro 32bitové projekty.

S povolenou integrací celého systému stačí spustit msbuild sestavení projektu:

PS D:\projects\manifest-example> msbuild
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/13/2023 3:07:36 PM.

Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  (omitted)
PrepareForBuild:
  (omitted)
InitializeBuildStatus:
  (omitted)
ComputeStdModulesCompileInputs:
  (omitted)
SetModuleDependencies:
VcpkgTripletSelection:
  Using triplet "x64-windows" from "D:\vcpkg\installed\x64-windows\"
  Using normalized configuration "Debug"
ClCompile:
  (omitted)
Link:
  (omitted)
AppLocalFromInstalled:
  pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manifest-example\x64\Debug\manifest-example.exe"
   "D:\vcpkg\installed\x64-windows\debug\bin" "x64\Debug\manifest-example.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
  D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
  Deleting file "x64\Debug\manifest-example.tlog\unsuccessfulbuild".
  Touching "x64\Debug\manifest-example.tlog\manifest-example.lastbuildstate".
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 tomto kurzu jste nainstalovali závislosti pro jednoduchý projekt pomocí vcpkg jako rozhraní příkazového řádku.

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

  • Instalace balíčků pomocí souboru manifestu
  • Instalace balíčků pro vlastní platformy pomocí tripletů
  • Uzamčení verzí pro opakovatelné buildy pomocí správy verzí
  • Opakované použití binárních binárních souborů napříč běhy kontinuální integrace s využitím binární mezipaměti
  • Správa privátních knihoven pomocí vlastních registrů