Freigeben über


Lernprogramm: Installieren einer Abhängigkeit aus einer Manifestdatei

vcpkg verfügt über zwei Betriebsmodi: klassischen Modus und Manifestmodus. In diesem Artikel wird beschrieben, wie Pakete mithilfe des Manifestmodus installiert werden. Dies ist der empfohlene Workflow für die meisten Benutzer.

Im Manifestmodus deklarieren Sie die direkten Abhängigkeiten Ihres Projekts in einer Manifestdatei mit dem Namen vcpkg.json.

Manifestdateien verfügen über ein eigenes vcpkg_installed Verzeichnis, in dem abhängigkeiten installiert werden, im Gegensatz zum klassischen Modus, in dem alle Pakete in einem gemeinsamen %VCPKG_ROOT%/installed Verzeichnis installiert sind. Daher kann jedes Projekt ein eigenes Manifest und einen eigenen Satz von Abhängigkeiten aufweisen, die nicht mit den Abhängigkeiten anderer Projekte in Konflikt stehen.

Der Manifestmodus ist auch erforderlich, um erweiterte Features wie Versionsverwaltung und benutzerdefinierte Registrierungen zu verwenden.

In diesem Tutorial lernen Sie Folgendes:

Voraussetzungen

  • vcpkg
  • Ein Terminal
  • Ein Code-Editor
  • einen C++-Compiler
  • (Optional) CMake oder MSBuild

1 – Erstellen eines Projekts mit einem Manifest

Erstellen Sie in einem neuen Ordner eine Quelldatei mit den folgenden main.cxx Inhalten:

#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));
  }
}

Der Code verweist auf die Open-Source-Bibliotheken: cxxopts, fmt, und range-v3; die alle in der öffentlichen vcpkg-Registrierung verfügbar sind.https://github.com/Microsoft/vcpkg

Um diese Abhängigkeiten zu deklarieren, erstellen Sie eine Datei, die im selben Verzeichnis wie Ihr Projekt benannt ist vcpkg.json :

vcpkg.json:

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

Sie müssen nur Ihre direkten Abhängigkeiten in der "dependencies" Liste angeben. Wenn sie ausgeführt wird, löst vcpkg alle erforderlichen transitiven Abhängigkeiten auf und installiert sie.

2 – Integrieren von vcpkg in Ihr Buildsystem

In diesem Schritt zeigen wir Ihnen, wie Sie vcpkg in CMake oder MSBuild integrieren, damit Ihre Projektabhängigkeiten automatisch installiert oder wiederhergestellt werden, wenn Sie das Projekt erstellen.

Wenn Sie ein anderes Buildsystem verwenden, fahren Sie mit dem nächsten Schritt fort: Installieren von Abhängigkeiten.

Um vcpkg in Ihren MSBuild-Projekten zu verwenden, führen Sie den folgenden Befehl aus:

vcpkg integrate install

Sie müssen den vcpkg integrate install Befehl nur ausführen, wenn Sie die MSBuild-Integration zum ersten Mal aktivieren möchten. Dies ermöglicht die MSBuild-Integration für alle vorhandenen und zukünftigen Projekte. Wird vcpkg integrate remove verwendet, um die systemweite MSBuild-Integration zu entfernen.

Diese Integrationsmethode fügt automatisch vcpkg-installierte Pakete zu den folgenden Projekteigenschaften hinzu: Include Directories, , Link Directoriesund Link Libraries. Darüber hinaus wird eine Nachbuildaktion erstellt, die sicherstellt, dass alle erforderlichen DLLs in den Buildausgabeordner kopiert werden. Dies funktioniert für alle Lösungen und Projekte mit Visual Studio 2015 oder höher.

3 – Installieren von Abhängigkeiten

Wenn Sie CMake oder MSBuild verwenden und den vorherigen Schritt befolgt haben, können Sie mit dem nächsten Schritt fortfahren: Erstellen Sie das Projekt.

Wenn Sie ein anderes Buildsystem verwenden oder die Abhängigkeiten manuell installieren möchten, müssen Sie lediglich im Verzeichnis ausgeführt vcpkg install werden, das Ihre Manifestdatei enthält.

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)

Nach Abschluss des Befehls sind alle integrierten Pakete in einem vcpkg_installed Verzeichnis vorhanden. Der spezifische Speicherort dieses Verzeichnisses hängt von Ihrem Buildsystem ab; in der Regel innerhalb des Standardausgabeordners des Buildsystems oder neben Der vcpkg.json Datei.

4 – Erstellen des Projekts

Standardmäßig ist der Manifestmodus in MSBuild-Projekten deaktiviert.

Um Manifeste in Ihrem Projekt zu aktivieren, legen Sie die VcpkgEnableManifest Eigenschaft in der .vcxproj Datei fest:

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

Alternativ können Sie den Manifestmodus in Ihrem MSBuild-Aufruf aktivieren, indem Sie ihn als Parameter übergeben msbuild /p:VcpkgEnableManifest=true .

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.

Nächste Schritte

In diesem Handbuch haben Sie Abhängigkeiten für ein einfaches Projekt mithilfe einer Manifestdatei installiert.

Hier sind einige zusätzliche Aufgaben, die Sie als Nächstes ausprobieren können:

  • Installieren von Paketen für benutzerdefinierte Plattformen, Compiler oder Buildarchitekturen mithilfe von Triplets
  • Sperren der Versionen für wiederholbare Builds mithilfe der Versionsverwaltung
  • Wiederverwenden von Binärdateien über lokale oder fortlaufende Integrationsausführungen mithilfe der binären Zwischenspeicherung
  • Verwalten Ihrer privaten Bibliotheken mithilfe benutzerdefinierter Registrierungen