使用 vcpkg#
警告
请确保网络可访问 github (例如 "steam++工具箱" 中可以选择加速 github 访问).
提示
同样地, 该方法适用于任何支持 CMake 的软件 (Visual Studio 2022、Qt Creator、CLion 等).
请先更新学习模板 (cpp_novice, ppp2_novice 或 ppp3_novice).
在 cpp_novice 中启用 vcpkg#
在 cpp_novice 文件夹根目录中找到 CMakeLists.txt, 在 include(cpp_novice_fetch_project_options), project(...) 之前添加一行 run_vcpkg().
1cmake_minimum_required(VERSION 3.25)
2
3list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
4include(cpp_novice_fetch_project_options)
5run_vcpkg()
6
7project(cpp_novice LANGUAGES CXX)
搜索第三方库#
打开 Browse public vcpkg packages 进行搜索.
以 fmt 为例, 搜索结果中将会显示第三方库的最新版本, 点击可以查看更多信息.
网页搜索 fmt#
添加第三方库#
根据搜索结果, 我们找到了 fmt. 假设这就是我们要使用的库.
要使用它则需要在合适的位置添加它, 为此先要简单理解 cpp_novice 的项目管理是如何达成的.
添加原理#
整个 cpp_novice 文件夹是用 CMake 进行的项目管理, 其配置文件即根目录下的 CMakeLists.txt.
打开 CMakeLists.txt 你可以看到 add_program(...) 函数, 这是我为了新手使用方便, 对 CMake 进行的简化: 通过 add_program(<程序名> <源文件1> [源文件2]...) 即可添加一个名为 <程序名> 的程序.
1add_program(example_multiple # 程序名为 example_multiple
2 src/example_multiple/main.cpp # 源文件 1
3 src/example_multiple/hello.cpp # 源文件 2
4)
所谓添加第三方库, 就是由 CMake 找到第三方库, 并将第三方库链接到程序中.
通过某种方式 (此处为 vcpkg) 下载第三方库并告知 CMake 第三方库的存在.
在 CMake 中查找第三方库, 这一般通过
find_package(<第三方库包名> CONFIG REQUIRED)进行.在 CMake 中链接第三方库, 这一般通过
target_link_libraries(<程序名> PRIVATE <第三方库目标名>)进行.
第三方库的添加即依次进行以上步骤.
下载并告知 CMake 第三方库的存在#
以库 fmt 和 range-v3 为例.
在 cpp_novice 文件夹根目录中找到 vcpkg.json, 在 "dependencies" 的 [] 下方添加 fmt 和 range-v3:
1{
2 "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/index/docs/vcpkg.schema.json",
3 "dependencies": [
4 "fmt",
5 "range-v3"
6 ]
7}
添加后, 以某种方式清除 cmake 缓存并重新配置你 IDE 中的 cmake (例如, 你也许可以删除 build 或 out 文件夹, 并重启软件或在命令菜单用 cmake configure), 此时 CMake 将会自动下载 vcpkg, 并用它下载第三方库.
配置完成后, vcpkg 将会提示我们如何在 CMake 中使用第三方库:
vcpkg 给出的提示: find_package(<包名>) 和 target_link_libraries(... <目标名>)#
在 CMake 中查找并链接第三方库#
我为了新手使用方便, 对这个流程进行了简化.
打开 CMakeLists.txt, 找到 add_program_options:
在
DEPENDENCIES下方添加包名fmt和range-v3.在
LIBRARIES下方添加目标名fmt::fmt,range-v3::meta,range-v3::concepts和range-v3::range-v3.
1add_program_options(
2 DEPENDENCIES
3 fmt
4 range-v3
5
6 LIBRARIES
7 fmt::fmt
8 range-v3::meta
9 range-v3::concepts
10 range-v3::range-v3
11
12 INCLUDES
13 include
14)
此后, 所有用 add_program 添加的程序均能使用该第三方库.
扩展阅读#
笔者自己并不常使用 vcpkg, 请通过官网等自己学习.