Пример установки и использования пакетов: SQLite

Примечание.

В этом старом примере используется классический режим, но большинство разработчиков будут счастливее с режимом манифеста. Пример преобразования в режим манифеста в режим манифеста см . в примере CMake .

Шаг 1. Установка

Во-первых, нам нужно знать, какое имя SQLite идет в дереве портов. Для этого мы запустите search команду и проверьте выходные данные:

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

Глядя на список, мы видим, что порт называется "sqlite3". Вы также можете запустить search команду без аргументов, чтобы просмотреть полный список пакетов.

Затем установка выполняется так же просто, как и с помощью install команды.

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

Мы можем проверка, что sqlite3 был успешно установлен для рабочего стола Windows x86, выполнив list команду.

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

Чтобы установить для других архитектур и платформ, таких как универсальная платформа Windows или x64 Desktop, можно суффиксировать имя пакета с :<target>помощью .

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

Ознакомьтесь .\vcpkg help triplet со всеми поддерживаемыми целевыми объектами.

Шаг 2. Использование

Проект VS/MSBuild (интеграция с пользователем)

Рекомендуемый и наиболее продуктивный способ использования vcpkg — это интеграция с пользователем, что делает систему доступной для всех проектов, которые вы создаете. Интеграция с пользователем будет запрашивать доступ администратора при первом использовании на данном компьютере, но после этого больше не требуется, а интеграция настраивается на основе каждого пользователя.

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.

Примечание.

Вам потребуется перезапустить Visual Studio или выполнить сборку, чтобы обновить intellisense с изменениями.

Теперь вы можете просто использовать файл —> новый проект в Visual Studio, и библиотека будет автоматически доступна. Для SQLite можно попробовать пример C/C++.

Чтобы удалить интеграцию для пользователя, можно использовать .\vcpkg integrate remove.

CMake (файл цепочки инструментов)

Лучшим способом использования установленных библиотек с cmake является файл scripts\buildsystems\vcpkg.cmakeцепочки инструментов. Чтобы использовать этот файл, необходимо просто добавить его в командную строку CMake следующим образом:

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

Если вы используете CMake через Open Folder с Visual Studio, можно определить CMAKE_TOOLCHAIN_FILE , добавив раздел "переменные" в каждую конфигурацию 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"
    }]
  }]
}

Примечание.

Для принудительного полного восстановления может потребоваться удалить папку кэша CMake каждой измененной конфигурации. CMake В меню Cache (<configuration name>) вы найдетеDelete Cache Folders.

Теперь давайте создадим простой проект CMake с основным файлом.

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

Затем мы создадим наш проект обычным способом 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

Примечание.

Правильная библиотека sqlite3.dll автоматически копируется в выходную папку при создании для x86-windows. Вам потребуется распространить это вместе с приложением.

Обработка библиотек без поддержки собственного cmake

В отличие от других платформ, мы не добавляем каталог в include\ строку компиляции по умолчанию. Если вы используете библиотеку, которая не предоставляет интеграцию CMake, необходимо явно искать файлы и добавлять их самостоятельно.find_path()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})