cmake 包含header-only的vcpkg应该怎么写?

本文介绍如何在CMakeLists.txt中配置nlohmann-json库,通过两行代码实现头文件的查找和目录的包含,简化了json库的集成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以niohmann-json为例 ,在CMakeLists.txt里加入下面两行即可

find_path(NLOHMANNJSON_INCLUDE_DIR NAMES json.hpp PATH_SUFFIXES nlohmann)
include_directories(${NLOHMANNJSON_INCLUDE_DIR})
<think>我们参考用户提供的引用内容,特别是引用[1]和引用[2]中关于vcpkg安装库和CMake配置的信息。 用户执行了`vcpkg install spdlog`,现在需要解释输出信息以及如何在CMake项目中使用spdlog。 步骤: 1. 解释vcpkg安装spdlog的输出信息(典型成功输出) 2. 说明如何将vcpkgCMake项目集成 3. 给出在CMake项目中配置spdlog的具体方法 注意:用户使用的是Windows系统,Visual Studio 2022,x64架构。 根据引用[1],vcpkg是C++的包管理工具,可以跨平台使用。 根据引用[2],使用vcpkg安装库后,在Visual Studio项目中需要设置包含目录和库目录,或者使用CMake配置。 我们重点介绍CMake配置方式,因为用户项目本身使用CMake。 此外,引用[3]提到库的安装,我们可以类比,spdlog安装后也是将其头文件和库文件(如果有)安装到vcpkg的目录下。 具体步骤: 1. 安装spdlog:`vcpkg install spdlog:x64-windows` (用户可能已经执行) 2. 在CMake项目中,通过设置CMAKE_TOOLCHAIN_FILE来使用vcpkg提供的工具链文件 3. 在CMakeLists.txt中使用find_package查找spdlog,并链接到目标 注意:spdlog是header-only库,但为了正确配置,我们仍然需要使用find_package,因为它会设置一些编译定义(比如是否使用预编译头等)和依赖(如果spdlog使用了其他库,如fmt)。 下面详细展开:</think>### vcpkg 安装 spdlog 输出信息解析及 CMake 配置指南 #### 1. vcpkg 安装 spdlog 的典型输出 ```powershell > vcpkg install spdlog:x64-windows Computing installation plan... The following packages will be built and installed: spdlog[core]:x64-windows -> 1.14.1 Detecting compiler hash for triplet x64-windows... Restored 0 packages from C:\Users\AppData\Local\vcpkg\archives Starting package 1/1: spdlog:x64-windows Building package spdlog[core]:x64-windows... -- Using cached github.com/gabime/spdlog/archive/v1.14.1.tar.gz -- Cleaning sources at D:/vcpkg/buildtrees/spdlog/src/v1.14.1-xxxxxxxxxx -- Extracting source... -- Applying patch fix-warning.patch -- Using source at D:/vcpkg/buildtrees/spdlog/src/v1.14.1-xxxxxxxxxx -- Configuring x64-windows -- Building x64-windows-dbg -- Building x64-windows-rel -- Installing: D:/vcpkg/packages/spdlog_x64-windows/share/spdlog/copyright -- Performing post-build validation -- Performing post-build validation done Stored binary cache: C:\Users\AppData\Local\vcpkg\archives\xx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Installing package spdlog[core]:x64-windows... Elapsed time for package spdlog:x64-windows: 25.3 s Total elapsed time: 27.8 s The package spdlog:x64-windows provides CMake targets: find_package(spdlog CONFIG REQUIRED) target_link_libraries(main PRIVATE spdlog::spdlog) ``` **关键信息解析**: | 输出内容 | 含义说明 | |---------|---------| | `spdlog[core]:x64-windows -> 1.14.1` | 安装的库名、架构和版本号 | | `D:/vcpkg/buildtrees/spdlog` | 编译过程中的临时目录 | | `D:/vcpkg/packages/spdlog_x64-windows` | 最终安装目录 | | `find_package(spdlog CONFIG REQUIRED)` | CMake 集成指令 | | `spdlog::spdlog` | 链接目标名称 | | `Stored binary cache` | 已缓存二进制文件(加速后续安装)[^1] | --- #### 2. 验证安装成功 ```powershell # 检查已安装包 vcpkg list # 输出应包含: spdlog:x64-windows 1.14.1 Fast C++ logging library # 检查CMake配置文件位置 dir D:\vcpkg\installed\x64-windows\share\spdlog\ # 应看到 spdlogConfig.cmake 文件 ``` --- #### 3. CMake 项目集成配置 在项目根目录的 `CMakeLists.txt` 中添加: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) # 关键步骤:指定vcpkg工具链 set(CMAKE_TOOLCHAIN_FILE "D:/vcpkg/scripts/buildsystems/vcpkg.cmake") # 查找spdlog包 find_package(spdlog CONFIG REQUIRED) add_executable(my_app main.cpp) # 链接spdlog库(头文件库自动包含) target_link_libraries(my_app PRIVATE spdlog::spdlog) ``` #### 4. 构建项目 ```powershell # 生成构建系统(指定vcpkg工具链) cmake -G "Visual Studio 17 2022" -A x64 ^ -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake ^ -B build # 编译项目 cmake --build build --config Release ``` --- #### 5. 代码中使用 spdlog 在 `main.cpp` 中添加测试代码: ```cpp #include <spdlog/spdlog.h> int main() { // 设置日志级别 spdlog::set_level(spdlog::level::debug); // 输出日志 spdlog::info("Welcome to spdlog v{}!", SPDLOG_VER_STRING); spdlog::warn("Temperature approaching threshold: {:.1f}C", 87.2); spdlog::error("Sensor {} disconnected", 2); return 0; } ``` **输出示例**: ``` [2024-06-15 10:30:45.123] [info] Welcome to spdlog v1.14.1! [2024-06-15 10:30:45.125] [warning] Temperature approaching threshold: 87.2C [2024-06-15 10:30:45.126] [error] Sensor 2 disconnected ``` --- ### 常见问题解决 1. **CMake 找不到 spdlog**: ```cmake # 手动指定安装路径 list(APPEND CMAKE_PREFIX_PATH "D:/vcpkg/installed/x64-windows") ``` 2. **版本冲突**: ```powershell # 升级vcpkg和spdlog vcpkg update vcpkg upgrade spdlog ``` 3. **多架构支持**: ```powershell # 安装ARM64版本 vcpkg install spdlog:arm64-windows ``` > 通过 vcpkg 安装的库会自动处理依赖关系,例如 spdlog 会检测并链接 fmt 库[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值