将 yaml-cpp 添加到现有项目时正确设置 CMake 变量
correctly set CMake variables when adding yaml-cpp to existing project
我已将 yaml-cpp
git 存储库添加为子模块,并使用 add_subdirectory
.
将其添加到我的 CMake 项目中
一切正常,但我必须手动设置 YAML_CPP_INCLUDE_DIR
和 YAML_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_Add
与 execute_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>)
我已将 yaml-cpp
git 存储库添加为子模块,并使用 add_subdirectory
.
一切正常,但我必须手动设置 YAML_CPP_INCLUDE_DIR
和 YAML_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_Add
与 execute_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>)