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