安装和使用包示例: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))

可以通过运行 list 命令检查是否已成功为 x86 Windows 桌面安装 sqlite3。

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

要为其他体系结构和平台(如 通用 Windows 平台 或 x64 桌面)进行安装,可以在包名称后添加 :<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 与 Visual Studio 配合使用,则可以通过将“变量”部分添加到每个 CMakeSettings.json 配置来定义 CMAKE_TOOLCHAIN_FILE

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

注意

为 x86-windows 构建时,正确的 sqlite3.dll 会自动复制到输出文件夹。 需要将其与应用程序一起分发。

处理没有本机 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})