Sdílet prostřednictvím


Příklad instalace a použití balíčků: SQLite

Poznámka:

Tento starý příklad používá klasický režim, ale většina vývojářů bude šťastnější s režimem manifestu. Viz režim manifestu: CMake Příklad převodu do režimu manifestu.

Krok 1: Instalace

Nejprve musíme vědět, jaký název SQLite ve stromu portů prochází. Provedeme to tak, že spustíme search příkaz a zkontrolujeme výstup:

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

Když se podíváme na seznam, vidíme, že port má název "sqlite3". Můžete také spustit search příkaz bez argumentů a zobrazit úplný seznam balíčků.

Instalace je pak jednoduchá jako použití install příkazu.

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))

Spuštěním list příkazu můžeme zkontrolovat, jestli byl sqlite3 úspěšně nainstalován pro počítač s Windows x86.

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

Chcete-li nainstalovat pro jiné architektury a platformy, jako je Univerzální platforma Windows nebo x64 Desktop, můžete příponu názvu balíčku příponou :<target>.

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

Podívejte se .\vcpkg help triplet na všechny podporované cíle.

Krok 2: Použití

Projekt VS/MSBuild (integrace na úrovni uživatele)

Doporučený a nejproduktivnější způsob, jak používat vcpkg, je prostřednictvím integrace celého uživatele a zpřístupňuje systém pro všechny projekty, které sestavujete. Integrace pro celou uživatele zobrazí výzvu k prvnímu použití na daném počítači pro přístup správce, ale poté se už nevyžaduje a integrace se konfiguruje pro jednotlivé uživatele.

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.

Poznámka:

Budete muset restartovat Visual Studio nebo provést sestavení, aby se aktualizovala intellisense se změnami.

Teď můžete jednoduše použít Soubor –> Nový projekt v sadě Visual Studio a knihovna bude automaticky dostupná. Pro SQLite si můžete vyzkoušet jejich ukázku C/C++.

Pokud chcete odebrat integraci pro uživatele, můžete použít .\vcpkg integrate remove.

CMake (soubor toolchain)

Nejlepší způsob, jak používat nainstalované knihovny s cmake, je prostřednictvím souboru scripts\buildsystems\vcpkg.cmaketoolchain . Pokud chcete tento soubor použít, stačí ho jednoduše přidat do příkazového řádku CMake jako:

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

Pokud používáte CMake prostřednictvím open folder with Visual Studio, můžete definovat CMAKE_TOOLCHAIN_FILE přidáním oddílu "variables" (proměnné) do každé konfigurace CMakeSettings.json :

{
  "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"
    }]
  }]
}

Poznámka:

Aby bylo možné vynutit úplnou regeneraci, může být nutné odstranit složku mezipaměti CMake každé upravené konfigurace. CMake V nabídce najdete Delete Cache Folderspod Cache (<configuration name>) položkou .

Teď vytvoříme jednoduchý projekt CMake s hlavním souborem.

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

Pak projekt sestavíme běžným způsobem CMake:

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

Poznámka:

Správná knihovna sqlite3.dll se při sestavování pro x86-windows automaticky zkopíruje do výstupní složky. Budete ho muset distribuovat společně s vaší aplikací.

Zpracování knihoven bez nativní podpory cmake

Na rozdíl od jiných platforem automaticky nepřidáme include\ adresář do řádku kompilace ve výchozím nastavení. Pokud používáte knihovnu, která neposkytuje integraci CMake, budete muset explicitně vyhledat soubory a přidat je sami pomocí find_path() a find_library().

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