Share via


Installieren und Verwenden von Paketen (Beispiel): SQLite

Hinweis

In diesem alten Beispiel wird der klassische Modus verwendet, aber die meisten Entwickler sind glücklicher mit dem Manifestmodus. Siehe Manifestmodus: CMake -Beispiel für ein Beispiel für die Konvertierung in den Manifestmodus.

Schritt 1: Installieren

Zunächst müssen wir wissen, welchen Namen SQLite in der Portsstruktur hat. Dazu führen wir den search Befehl aus und prüfen die Ausgabe:

PS D:\src\vcpkg> .\vcpkg search sqlite
libodb-sqlite        2.4.0            Sqlite support for the ODB ORM library
sqlite3              3.32.1           SQLite is a software library that implements a se...

If your library is not listed, please open an issue at:
    https://github.com/Microsoft/vcpkg/issues

In der Liste können wir sehen, dass der Port "sqlite3" heißt. Sie können den search Befehl auch ohne Argumente ausführen, um die vollständige Liste der Pakete anzuzeigen.

Die Installation erfolgt dann so einfach wie die Verwendung des install Befehls.

PS D:\src\vcpkg> .\vcpkg install sqlite3
Computing installation plan...
The following packages will be built and installed:
    sqlite3[core]:x86-windows
Starting package 1/1: sqlite3:x86-windows
Building package sqlite3[core]:x86-windows...
-- Downloading https://sqlite.org/2020/sqlite-amalgamation-3320100.zip...
-- Extracting source C:/src/vcpkg/downloads/sqlite-amalgamation-3320100.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at C:/src/vcpkg/buildtrees/sqlite3/src/3320100-15aeda126a.clean
-- Configuring x86-windows
-- Building x86-windows-dbg
-- Building x86-windows-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x86-windows... done
Installing package sqlite3[core]:x86-windows...
Installing package sqlite3[core]:x86-windows... done
Elapsed time for package sqlite3:x86-windows: 12 s

Total elapsed time: 12.04 s

The package sqlite3:x86-windows provides CMake targets:

    find_package(unofficial-sqlite3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3))

Wir können überprüfen, ob sqlite3 erfolgreich für x86 Windows-Desktop installiert wurde, indem der list Befehl ausgeführt wird.

PS D:\src\vcpkg> .\vcpkg list
sqlite3:x86-windows         3.32.1           SQLite is a software library that implements a se...

Um sie für andere Architekturen und Plattformen wie Universelle Windows-Plattform oder x64 Desktop zu installieren, können Sie den Paketnamen mit :<target>suffixieren.

PS D:\src\vcpkg> .\vcpkg install sqlite3:x86-uwp zlib:x64-windows

Alle unterstützten Ziele finden Sie unter.See .\vcpkg help triplet for all supported targets.

Schritt 2: Verwenden

VS/MSBuild-Projekt (benutzerweite Integration)

Die empfohlene und produktivste Methode zur Verwendung von vcpkg ist die benutzerweite Integration, wodurch das System für alle Projekte verfügbar ist, die Sie erstellen. Die benutzerweite Integration fordert den Administratorzugriff auf, wenn er zum ersten Mal auf einem bestimmten Computer verwendet wird, aber danach nicht mehr erforderlich ist und die Integration auf Benutzerbasis konfiguriert wird.

PS D:\src\vcpkg> .\vcpkg integrate install
Applied user-wide integration for this vcpkg root.

All C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

Hinweis

Sie müssen Visual Studio neu starten oder einen Build ausführen, um IntelliSense mit den Änderungen zu aktualisieren.

Sie können jetzt einfach "Datei –> Neues Projekt" in Visual Studio verwenden, und die Bibliothek ist automatisch verfügbar. Für SQLite können Sie das C/C++-Beispiel ausprobieren.

Um die Integration für Ihren Benutzer zu entfernen, können Sie dies verwenden .\vcpkg integrate remove.

CMake (Toolchain-Datei)

Die beste Möglichkeit, installierte Bibliotheken mit cmake zu verwenden, ist über die Toolkette-Datei scripts\buildsystems\vcpkg.cmake. Um diese Datei zu verwenden, müssen Sie sie einfach ihrer Befehlszeile "CMake" hinzufügen:

-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake.

Wenn Sie CMake über "Ordner öffnen" mit Visual Studio verwenden, können Sie definieren CMAKE_TOOLCHAIN_FILE , indem Sie jedem Ihrer CMakeSettings.json Konfigurationen einen Abschnitt "Variablen" hinzufügen:

{
  "configurations": [{
    "name": "x86-Debug",
    "generator": "Visual Studio 15 2017",
    "configurationType" : "Debug",
    "buildRoot":  "${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}",
    "cmakeCommandArgs": "",
    "buildCommandArgs": "-m -v:minimal",
    "variables": [{
      "name": "CMAKE_TOOLCHAIN_FILE",
      "value": "D:\\src\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
    }]
  }]
}

Hinweis

Möglicherweise muss der CMake-Cacheordner jeder geänderten Konfiguration gelöscht werden, um eine vollständige Regeneration zu erzwingen. CMake Im Menü finden Delete Cache FoldersSie unter Cache (<configuration name>) .

Lassen Sie uns nun ein einfaches CMake-Projekt mit einer Standard Datei erstellen.

# CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(test)

find_package(unofficial-sqlite3 CONFIG REQUIRED)

add_executable(main main.cpp)

target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)
// main.cpp
#include <sqlite3.h>
#include <stdio.h>

int main()
{
    printf("%s\n", sqlite3_libversion());
    return 0;
}

Dann bauen wir unser Projekt auf normale CMake-Weise:

PS D:\src\cmake-test> mkdir build 
PS D:\src\cmake-test> cd build
PS D:\src\cmake-test\build> cmake .. "-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake"
    // omitted CMake output here //
-- Build files have been written to: D:/src/cmake-test/build
PS D:\src\cmake-test\build> cmake --build .
    // omitted MSBuild output here //
Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:02.38
PS D:\src\cmake-test\build> .\Debug\main.exe
3.15.0

Hinweis

Die richtige sqlite3.dll wird beim Erstellen für x86-Windows automatisch in den Ausgabeordner kopiert. Sie müssen dies zusammen mit Ihrer Anwendung verteilen.

Behandeln von Bibliotheken ohne systemeigene Cmake-Unterstützung

Im Gegensatz zu anderen Plattformen fügen wir das include\ Verzeichnis ihrer Kompilierungszeile standardmäßig nicht automatisch hinzu. Wenn Sie eine Bibliothek verwenden, die keine CMake-Integration bereitstellt, müssen Sie explizit nach den Dateien suchen und sie selbst verwenden find_path() und find_library()hinzufügen.

# To find and use catch
find_path(CATCH_INCLUDE_DIR catch.hpp)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})

# To find and use azure-storage-cpp
find_path(WASTORAGE_INCLUDE_DIR was/blob.h)
find_library(WASTORAGE_LIBRARY wastorage)
target_include_directories(main PRIVATE ${WASTORAGE_INCLUDE_DIR})
target_link_libraries(main PRIVATE ${WASTORAGE_LIBRARY})