jbeder/yaml-cpp

GitHub Trending (daily) 工具

摘要

yaml-cpp 是一个用于 C++ 的 YAML 解析器和发射器库,符合 YAML 1.2 规范。

一个用 C++ 编写的 YAML 解析器和发射器
查看原文
查看缓存全文

缓存时间: 2026/07/10 12:08

jbeder/yaml-cpp 来源:https://github.com/jbeder/yaml-cpp

yaml-cpp 构建状态 文档 (https://codedocs.xyz/jbeder/yaml-cpp/)

yaml-cpp 是一个符合 YAML 1.2 规范 (http://www.yaml.org/spec/1.2/spec.html) 的 C++ YAML (http://www.yaml.org/) 解析器和发射器。

用法

请参考教程 (https://github.com/jbeder/yaml-cpp/wiki/Tutorial) 和如何发射 YAML (https://github.com/jbeder/yaml-cpp/wiki/How-To-Emit-YAML) 进行学习。

对于旧版 API(直到 0.5.0),请参见如何解析文档(旧版 API)(https://github.com/jbeder/yaml-cpp/wiki/How-To-Parse-A-Document-(Old-API))。

如何构建

yaml-cpp 使用 CMake (http://www.cmake.org) 来支持跨平台构建。在开始之前,请先安装 CMake (http://www.cmake.org) (资源 -> 下载)

基本构建步骤如下:

注意: 如果你没有使用针对你平台的安装程序,请确保将 CMake 的 bin 文件夹添加到你的路径中。

1. 进入源码目录,创建构建文件夹并运行 CMake

sh mkdir build cd build cmake [-G generator] [-DYAML_BUILD_SHARED_LIBS=on|OFF] ..

  • generator 选项是你想使用的构建系统。不带参数运行 cmake 可以查看所有可用的生成器列表。
  • 在 Windows 上,你可以使用 “Visual Studio 12 2013”(VS 2013 32 位)或 “Visual Studio 14 2015 Win64”(VS 2015 64 位)。
  • 在 OS X 上,你可以使用 “Xcode”。
  • 在类 UNIX 系统上,省略该选项(将生成 Makefile)。
  • yaml-cpp 默认构建为静态库,如果你希望构建动态库,请指定 -DYAML_BUILD_SHARED_LIBS=ON
  • GNU 标准 C++ 库 (https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html) 的调试模式可以在 yaml-cpp 和客户端代码都使用 _GLIBCXX_DEBUG 标志编译时启用(例如,通过使用 -D CMAKE_CXX_FLAGS_DEBUG='-g -D_GLIBCXX_DEBUG' 选项调用 CMake)。请注意,为了让 yaml-cpp 的单元测试成功运行,GoogleTest 库也必须使用此标志构建,即不能使用系统自带的版本(CMake 选项 YAML_USE_SYSTEM_GTEST 必须为 OFF,这是默认值)。
  • 有关自定义构建的更多选项,请参见 CMakeLists.txt (https://github.com/jbeder/yaml-cpp/blob/master/CMakeLists.txt) 文件。

2. 构建它!

  • 你需要运行的命令取决于你之前选择的生成器。

注意: 要清理,只需删除 build 目录。

如何在你的 CMake 项目中集成它

你可以使用例如 FetchContent:

cmake include(FetchContent) FetchContent_Declare( yaml-cpp GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git GIT_TAG # 可以是一个标签(yaml-cpp-x.x.x),一个提交哈希值,或一个分支名(master) ) FetchContent_MakeAvailable(yaml-cpp) target_link_libraries(YOUR_LIBRARY PUBLIC yaml-cpp::yaml-cpp) # 需要 yaml-cpp 库的库或可执行文件

近期发布

yaml-cpp 0.9.0 (https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.9.0) 已发布!

如果你仍想使用旧版 API,yaml-cpp 0.3.0 (https://github.com/jbeder/yaml-cpp/releases/tag/release-0.3.0) 仍然可用。

旧版 API 将在 2026 年停止接收 bug 修复。 0.3.x 版本提供旧版 API,0.5.x 及以上版本均提供新版 API。

API 文档

自动生成的 API 参考文档托管在 CodeDocs 上 (https://codedocs.xyz/jbeder/yaml-cpp/index.html)

第三方集成

以下项目并非官方支持:

  • Qt 封装 (https://gist.github.com/brcha/d392b2fe5f1e427cc8a6)
  • UnrealEngine 封装 (https://github.com/jwindgassen/UnrealYAML)

相似文章

为YAML辩护

Lobsters Hottest

Posit的一篇博文为YAML辩护,反驳当前普遍认为TOML更优的共识,回顾了配置格式的历史,并指出YAML的规范与工具已经演进,解决了过去的批评。

YAML:问题一大堆

Hacker News Top

一篇讽刺文章,指出YAML在DevOps和编程环境中的各种缺陷和怪癖,例如解析错误和Kubernetes等工具中的配置错误。

rustc_codegen_jvm: 可生成JVM字节码的Rust编译器后端

Lobsters Hottest

rustc_codegen_jvm 是一个自定义的Rust编译器后端,能够生成JVM字节码,从而将Rust代码编译成可在JVM 8+上运行的JAR文件。它支持多种Rust特性,包括控制流、数据结构、特征(traits)和闭包。