为 yaml-cpp 库找到正确的 cmake 配置

Posted

技术标签:

【中文标题】为 yaml-cpp 库找到正确的 cmake 配置【英文标题】:Finding correct cmake configuration for yaml-cpp library 【发布时间】:2018-06-26 06:25:30 【问题描述】:

我试图在我的项目中使用yaml-cpp。通过尝试以下名称,我花了半个小时才正确链接库。在我终于在this file 中偶然发现它们之后,我决定这样做:

find_package(yaml-cpp REQUIRED)
include_directories($YAML_INCLUDE_DIRS)
target_link_libraries($YAML_CPP_LIBRARIES)

它有效,但我搜索这些的方式似乎是无脑的。

如何远程找出包含变量的正确名称?可能是YAML_LIBSYAML_LIBRARYYAML_CPP_LIBRARIES,没有标准吧?确定大多数 c++ 库的正确 cmake 配置的适当方法是什么?

谢谢。

【问题讨论】:

RTFM ;-):通过阅读 Findyaml-cpp 的文档,如果这还不够,请在 CMAKE_MODULE_PATH 中检查 Findyaml-cpp 的源 或者查看cmake.in文件:github.com/jbeder/yaml-cpp/blob/master/yaml-cpp-config.cmake.in 这是一个食谱吗?安装新库时查找.cmake.in 文件? 【参考方案1】:

大部分FindXXX.cmake 脚本的顶部都有使用说明(正如CMake cmets 开始#)。 XXXConfig.cmake(或xxx-config.cmake)脚本也是如此。

命令find_package(XXX) 使用其中一种脚本(实际存在的脚本)。因此,在使用这种方法发现包之前,请确保您已阅读“嵌入”到此类脚本中的描述。

在您的情况下,yaml-cpp-config.cmake 文件(在构建或安装目录中创建)包含以下描述:

# - Config file for the yaml-cpp package
# It defines the following variables
#  YAML_CPP_INCLUDE_DIR - include directory
#  YAML_CPP_LIBRARIES    - libraries to link against

所以正确使用find_package(yaml-cpp) 的结果是

include_directories($YAML_CPP_INCLUDE_DIRS)
target_link_libraries(<your-target> $YAML_CPP_LIBRARIES)

【讨论】:

所有我需要的。谢谢。

以上是关于为 yaml-cpp 库找到正确的 cmake 配置的主要内容,如果未能解决你的问题,请参考以下文章

未定义的参考链接 yaml-cpp 程序与 mingw-w64 + cmake

如何在 cmake 中正确链接库?

链接 Yaml-cpp 和 Armadillo 共享库的 CMake 项目

CMake - 静态 yaml-cpp 作为 git 子模块的链接器错误

CMake - 链接器错误与静态yaml-cpp作为git子模块

yaml-cpp 不能用 g++ 编译