将 yaml-cpp 添加到现有项目时正确设置 CMake 变量

correctly set CMake variables when adding yaml-cpp to existing project

我已将 yaml-cpp git 存储库添加为子模块,并使用 add_subdirectory.

将其添加到我的 CMake 项目中

一切正常,但我必须手动设置 YAML_CPP_INCLUDE_DIRYAML_CPP_LIBRARIES 才能将它们用于我自己的目标。

因为有一个文件 yaml-cpp-config.cmake(在构建文件夹中生成)设置这些变量,所以我试图只包含它:

include("${CMAKE_BINARY_DIR}/yaml-cpp/yaml-cpp-config.cmake")

但后来我得到:

CMake Error at /bla/bla/build/yaml-cpp/yaml-cpp-config.cmake:11 (include):
  The file

/bla/bla/aml-cpp/yaml-cpp-targets.cmake

  was generated by the export() command.  It may not be used as the argument
  to the include() command.  Use ALIAS targets instead to refer to targets by
  alternative names.

我真的不明白这个消息。我如何为我的目标提供 yaml-cpp 包含目录和库而无需设置硬编码变量?

我不是在寻找 正确 include() 文件的方法,以防万一它不必完成。我只对 应该如何 向我的目标提供所需信息感兴趣。

不幸的是 yaml-cpp 似乎没有使用 target_include_directories() 这会在需要的地方自动设置包含目录。

来自 export 命令的 description

Create a file <filename> that may be included by outside projects to import targets from the current project’s build tree.

注意 "outside" 字:这就是为什么您在尝试包含来自 same 项目的文件时收到错误消息的原因,该项目发出 export命令。

使用 yaml-cpp-config.cmake 文件的正确方法是在项目 yaml-cpp 外部 构建。例如,您可以将 ExternalProject_Addexecute_process 结合用于构建 yaml-cpp 作为项目配置阶段的一部分,请参阅有关此方法的更多信息 here.

然后您可以使用 find_package:

将给定文件包含到您的项目中
find_package(yaml-cpp PATHS <yaml-cpp-build-dir>)

请注意,binary 目录中的 yaml-cpp-config.cmake 描述了 yaml-cpp 项目的 构建状态

如果你想从你的项目安装 libraries/executables,你最好安装 yaml-cpp,并从其 安装 目录中包含相应的文件:

find_package(yaml-cpp PATHS <yaml-cpp-install-dir>)