无法从vcpkg安装中#include <fmt>的问题求助
fmt库
#include <fmt>报错问题排查方案 主机环境
- 操作系统:Windows 11 搭配 WSL(Ubuntu-22.04)
- 编译器:Clang 14.0.0
问题详情
通过vcpkg install fmt --triplet x64-Linux完成fmt库安装,顶层CMakeLists.txt中配置查找FMT包并链接到可执行文件后构建成功,但代码中#include <fmt>时直接报错。IDE能自动提示FMT相关内容(已识别到包存在),确认fmt已安装,修改c_cpp_properties.json包含目录后问题未解决。相关代码包为hp_bot.zip。
解决建议
1. 修正CMake配置逻辑
确保CMake使用vcpkg提供的包配置模式,而非原生查找逻辑:
cmake_minimum_required(VERSION 3.20) project(your_project_name) # 必须以CONFIG模式查找fmt find_package(fmt CONFIG REQUIRED) add_executable(your_executable main.cpp) # 链接fmt官方提供的目标 target_link_libraries(your_executable PRIVATE fmt::fmt)
2. 确认CMake工具链配置
执行CMake时必须指定vcpkg工具链文件,避免Windows与WSL路径混淆:
cmake -S . -B build \ -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake \ -DVCPKG_TARGET_TRIPLET=x64-Linux
同时检查WSL环境中VCPKG_ROOT变量是否指向WSL内的vcpkg目录(禁止使用Windows路径)。
3. 让IDE自动读取编译配置
禁用手动修改的c_cpp_properties.json,让IDE从CMake生成的compile_commands.json自动获取包含目录:
- 删除现有build目录,重新执行CMake配置生成
compile_commands.json - 在VS Code中切换「CMake: Select Kit」为WSL下的Clang工具链,刷新CMake配置
4. 验证头文件路径是否被正确引入
在WSL中定位fmt头文件所在目录:
find $(vcpkg root)/packages/fmt_x64-linux -name "fmt" -type d
执行cmake --build build --verbose查看编译命令中的-I参数,确认上述路径是否被包含。若未包含,可在CMake中显式添加:
target_include_directories(your_executable PRIVATE ${fmt_INCLUDE_DIRS})
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

