为 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_LIBS
,YAML_LIBRARY
,YAML_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
链接 Yaml-cpp 和 Armadillo 共享库的 CMake 项目
CMake - 静态 yaml-cpp 作为 git 子模块的链接器错误