必须安装yaml-cpp并执行make install生成config文件,否则find_package无法找到;需验证/usr/local/lib/cmake/yaml-cpp/yaml-cppConfig.cmake是否存在,正确调用应为find_package(yaml-cpp 0.8.0 REQUIRED CONFIG)并链接yaml-cpp::yaml-cpp。

yaml-cpp 未被 find_package 找到的典型现象
执行 find_package(yaml-cpp REQUIRED) 后报错:Could not find a package configuration file provided by "yaml-cpp",或提示 Found yaml-cpp: FALSE。这不是你写错了命令,而是 CMake 根本没看到 yaml-cpp 的配置文件(yaml-cppConfig.cmake 或 yaml-cpp-config.cmake),常见于直接用系统包管理器(如 apt、brew)安装、或只编译没安装 yaml-cpp 的情况。
必须先安装 yaml-cpp,且确保生成 config 文件
yaml-cpp 默认构建时不安装 CMake 配置文件,必须显式启用并完成 install 步骤:
- 从源码构建时,
cmake -D YAML_CPP_BUILD_TOOLS=OFF -D YAML_CPP_BUILD_TESTS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..(路径按需调整) - 务必运行
sudo make install(或make install到用户可写路径),否则find_package永远找不到它 - 验证是否成功:检查
/usr/local/lib/cmake/yaml-cpp/下是否存在yaml-cppConfig.cmake;若用 Homebrew(macOS),路径通常是$(brew --prefix)/lib/cmake/yaml-cpp/
CMakeLists.txt 中正确调用 find_package 的写法
不能只写 find_package(yaml-cpp) 就完事,后续链接和头文件路径必须匹配实际安装结构:
- 推荐指定版本和组件:
find_package(yaml-cpp 0.8.0 REQUIRED CONFIG)(CONFIG强制走 config 模式,避免误入 Findyaml-cpp.cmake) - 链接目标用
target_link_libraries(my_target PRIVATE yaml-cpp::yaml-cpp)—— 注意双冒号语法,这是 IMPORTED TARGET,不是库名字符串 - 头文件自动包含:只要
yaml-cpp::yaml-cpp是 INTERFACE target,target_include_directories不用手动加,CMake 会透传其INTERFACE_INCLUDE_DIRECTORIES
找不到时的临时绕过方案(仅限调试)
如果暂时无法安装 yaml-cpp(比如 CI 环境权限受限),可用 add_subdirectory 直接嵌入源码,但要注意破坏封装性:
立即学习“C++免费学习笔记(深入)”;
- 把 yaml-cpp 源码放项目子目录(如
third_party/yaml-cpp),在 CMakeLists.txt 中写:add_subdirectory(third_party/yaml-cpp) - 然后链接
target_link_libraries(my_target PRIVATE yaml-cpp)(此时是普通 STATIC/LIBRARY target,无双冒号) - ⚠️ 编译时间变长,且可能与主项目 C++ 标准(如
-std=c++17)冲突,需统一设置set(CMAKE_CXX_STANDARD 17)在add_subdirectory前
CMAKE_PREFIX_PATH,结果反复改 find_package 参数却毫无作用。


















