Lernprogramm: Installieren und Verwenden von Paketen mit vcpkg

In diesem Lernprogramm erfahren Sie, wie Sie ein C++-Programm "Hallo Welt" erstellen, das die fmt Bibliothek mit CMake und vcpkg verwendet. Sie installieren Abhängigkeiten, konfigurieren, erstellen und führen eine einfache Anwendung aus.

Voraussetzungen

  • Ein Terminal
  • einen C++-Compiler
  • CMake
  • Git

Hinweis

Für Windows-Benutzer ist der MSVC (Microsoft Visual C++-Compiler) von Visual Studio der erforderliche Compiler für die C++-Entwicklung.

1 – Einrichten von vcpkg

  1. Klonen des Repositorys

    Der erste Schritt besteht darin, das vcpkg-Repository von GitHub zu klonen. Das Repository enthält Skripts zum Abrufen der ausführbaren Datei vcpkg und eine Registrierung von kuratierten Open-Source-Bibliotheken Standard von der vcpkg-Community enthalten. Führen Sie dazu Folgendes aus:

    git clone https://github.com/microsoft/vcpkg.git
    

    Die kuratierte vcpkg-Registrierung ist eine Reihe von mehr als 2.000 Open-Source-Bibliotheken. Diese Bibliotheken wurden von den kontinuierlichen Integrationspipelines von vcpkg überprüft, um zusammenzuarbeiten. Während das vcpkg-Repository nicht den Quellcode für diese Bibliotheken enthält, enthält es Rezepte und Metadaten zum Erstellen und Installieren in Ihrem System.

  2. Ausführen des Bootstrap-Skripts

    Nachdem Sie das vcpkg-Repository geklont haben, navigieren Sie zum vcpkg Verzeichnis, und führen Sie das Bootstrap-Skript aus:

    cd vcpkg && bootstrap-vcpkg.bat
    
    cd vcpkg; .\bootstrap-vcpkg.bat
    
    cd vcpkg && ./bootstrap-vcpkg.sh
    

    Das Bootstrap-Skript führt erforderliche Prüfungen durch und lädt die ausführbare Datei vcpkg herunter.

    Das ist alles! vcpkg ist eingerichtet und einsatzbereit.

2 – Einrichten des Projekts

  1. Konfigurieren Sie die Umgebungsvariable VCPKG_ROOT.

    export VCPKG_ROOT=/path/to/vcpkg
    export PATH=$VCPKG_ROOT:$PATH
    

    Hinweis

    Das Festlegen von Umgebungsvariablen mit dem export Befehl wirkt sich nur auf die aktuelle Shellsitzung aus. Um diese Änderung dauerhaft in Sitzungen vorzunehmen, fügen Sie den export Befehl zum Profilskript Ihrer Shell hinzu (z. B ~/.bashrc . oder ~/.zshrc).

    set VCPKG_ROOT="C:\path\to\vcpkg"
    set PATH=%VCPKG_ROOT%;%PATH%
    

    Hinweis

    Das Festlegen von Umgebungsvariablen auf diese Weise wirkt sich nur auf die aktuelle Terminalsitzung aus. Um diese Änderungen in allen Sitzungen dauerhaft vorzunehmen, legen Sie sie über den Bereich "Windows System Environment Variables" fest.

    $env:VCPKG_ROOT = "C:\path\to\vcpkg"
    $env:PATH = "$env:VCPKG_ROOT;$env:PATH"
    

    Hinweis

    Das Festlegen von Umgebungsvariablen auf diese Weise wirkt sich nur auf die aktuelle Terminalsitzung aus. Um diese Änderungen in allen Sitzungen dauerhaft vorzunehmen, legen Sie sie über den Bereich "Windows System Environment Variables" fest.

    Die Einstellung VCPKG_ROOT teilt vcpkg mit, wo sich Ihre vcpkg-Instanz befindet. PATH Durch das Hinzufügen wird sichergestellt, dass Sie vcpkg-Befehle direkt über die Shell ausführen können.

  2. Erstellen Sie das Projektverzeichnis.

    mkdir helloworld && cd helloworld
    

3 – Hinzufügen von Abhängigkeiten und Projektdateien

  1. Erstellen Sie die Manifestdatei, und fügen Sie die fmt Abhängigkeit hinzu.

    Erstellen Sie zunächst eine Manifestdatei (vcpkg.json) im Verzeichnis Ihres Projekts, indem Sie den vcpkg new Befehl aus dem helloworld Verzeichnis ausführen:

    vcpkg new --application
    

    Fügen Sie als Nächstes die fmt Abhängigkeit hinzu:

    vcpkg add port fmt
    

    Ihr App-Modul (vcpkg.json) sollte wie folgt aussehen:

    {
        "dependencies": [
            "fmt"
        ]
    }
    

    Dies ist Ihre Manifestdatei. vcpkg liest die Manifestdatei, um zu erfahren, welche Abhängigkeiten installiert und in CMake integriert werden sollen, um die für Ihr Projekt erforderlichen Abhängigkeiten bereitzustellen.

    In der Standarddatei vcpkg-configuration.json werden Basislinieneinschränkungen eingeführt, wobei die Mindestversionen von Abhängigkeiten angegeben werden, die ihr Projekt verwenden sollte. Während das Ändern dieser Datei außerhalb des Umfangs dieses Lernprogramms liegt, spielt sie eine wichtige Rolle bei der Definition von Versionsbeschränkungen für die Abhängigkeiten Ihres Projekts. Daher empfiehlt es sich, Ihrer Quellcodeverwaltung hinzuzufügen vcpkg-configuration.json , auch wenn es für dieses Lernprogramm nicht unbedingt erforderlich ist, um die Versionskonsistenz in verschiedenen Entwicklungsumgebungen sicherzustellen.

  2. Erstellen Sie die Projektdateien.

    Erstellen Sie die CMakeLists.txt Datei mit dem folgenden Inhalt:

    cmake_minimum_required(VERSION 3.10)
    
    project(HelloWorld)
    
    find_package(fmt CONFIG REQUIRED)
    
    add_executable(HelloWorld main.cpp)
    
    target_link_libraries(HelloWorld PRIVATE fmt::fmt)
    

    Lassen Sie uns nun die Funktionsweise jeder Zeile in der CMakeLists.txt Datei aufschlüsseln:

    • cmake_minimum_required(VERSION 3.10): Gibt an, dass die zum Erstellen des Projekts erforderliche Mindestversion von CMake 3.10 ist. Wenn die auf Ihrem System installierte CMake-Version niedriger ist als dies, wird ein Fehler generiert.
    • project(HelloWorld): Legt den Namen des Projekts auf "HelloWorld" fest.
    • find_package(fmt CONFIG REQUIRED): Sucht anhand der CMake-Konfigurationsdatei nach der fmt Bibliothek. Die REQUIRED Schlüsselwort (keyword) stellt sicher, dass ein Fehler generiert wird, wenn das Paket nicht gefunden wird.
    • add_executable(HelloWorld main.cpp): Fügt ein ausführbares Ziel namens "HelloWorld" hinzu, das aus der Quelldatei main.cpperstellt wurde.
    • target_link_libraries(HelloWorld PRIVATE fmt::fmt): Gibt an, dass die HelloWorld ausführbare Datei mit der fmt Bibliothek verknüpft werden soll. Die PRIVATE Schlüsselwort (keyword) weist darauf hin, dass fmt nur für das Bauen HelloWorld erforderlich ist und nicht an andere abhängige Projekte weitergegeben werden sollte.

    Erstellen Sie die main.cpp Datei mit dem folgenden Inhalt:

    #include <fmt/core.h>
    
    int main()
    {
        fmt::print("Hello World!\n");
        return 0;
    }
    

    In dieser main.cpp Datei ist der <fmt/core.h> Header für die Verwendung der fmt Bibliothek enthalten. Die main() Funktion ruft fmt::print() dann auf, um die Meldung "Hallo Welt!" an die Konsole auszugeben.

4 – Erstellen und Ausführen des Projekts

  1. Ausführen der CMake-Konfiguration

    Damit das CMake-Projektsystem C++-Bibliotheken erkennt, die von vcpkg bereitgestellt werden, müssen Sie die vcpkg.cmake Toolkettedatei bereitstellen. Um dies zu automatisieren, erstellen Sie eine CMakePresets.json Datei im Verzeichnis "helloworld" mit dem folgenden Inhalt:

    {
      "version": 2,
      "configurePresets": [
        {
          "name": "default",
          "generator": "Ninja",
          "binaryDir": "${sourceDir}/build",
          "cacheVariables": {
            "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
          }
        }
      ]
    }
    

    Diese CMakePresets.json Datei enthält eine einzelne Standardvoreinstellung für CMake und legt die CMAKE_TOOLCHAIN_FILE Variable fest. Das CMAKE_TOOLCHAIN_FILE CMake-Projektsystem ermöglicht die Erkennung von C++-Bibliotheken, die von vcpkg bereitgestellt werden. Durch das Hinzufügen der CMakePresets.json Automatisierung wird der Prozess zum Angeben der Toolkette beim Ausführen von CMake automatisiert.

    Konfigurieren Sie den Build mit CMake:

    cmake --preset=default
    
  2. Erstellen des Projekts

    Führen Sie Folgendes aus:

    cmake --build build
    
  3. Ausführen der Anwendung

    Führen Sie schließlich die ausführbare Datei aus, um ihre Anwendung in Aktion zu sehen:

    ./build/HelloWorld
    
    Hello World!
    
    .\build\HelloWorld.exe
    
    Hello World!
    

Nächste Schritte

Weitere vcpkg.jsonInformationen finden Sie in unserer Referenzdokumentation: