【发布时间】:2020-01-30 05:06:28
【问题描述】:
按照现代 CMake 指南(例如,参见 https://www.slideshare.net/DanielPfeifer1/effective-cmake,尤其是幻灯片 46),我正在尝试为我的 Pkg 写出一个 PkgConfig.cmake 文件。
Pkg 依赖于 Foo,而后者又依赖于 Bar。 Foo 和 Bar 都没有配置文件 - 我使用 FindFoo.cmake 和 FindBar.cmake 来查找它们。
我的PkgConfig.cmake 文件如下所示
set(Pkg_LIBRARIES Pkg::Pkg)
include(CMakeFindDependencyMacro)
find_dependency(Foo) # Use FindFoo.cmake find and import as target Foo::Foo
# Foo depends on Bar which is similarly imported using
# FindBar.cmake as target Bar::Bar
include("${CMAKE_CURRENT_LIST_DIR}/PkgTargets.cmake")
我的结果 PkgTargets.cmake 看起来像
add_library(Pkg::Pkg STATIC IMPORTED_
set_target_properties(Pkg::Pkg PROPERTIES
INTERFACE_LINK_LIBRARIES "Foo::Foo")
# Load information for each installed configuration
.
.
.
我的问题是如何避免其他包将 Pkg 导入他们的项目,而不必指定 Foo 的位置,更重要的是 Bar 的位置?
如果必须通过变量Foo_ROOT 和Bar_ROOT 或CMAKE_PREFIX_PATH 再次指定Foo 和Bar 包的位置,这是否会破坏构建传递依赖关系的目的?
我的 Pkg 已经知道它是在哪里找到的,所以我是否应该解析/设置 Foo_ROOT 和 Bar_ROOT 并将其放入我的 PkgConfig.cmake 文件中?
【问题讨论】:
标签: cmake configuration cmake-modules