遵循现代 CMake 指南(例如,参见https://www.slideshare.net/DanielPfeifer1/effective-cmake,尤其是幻灯片 46),我正在尝试PkgConfig.cmake
为我的Pkg
.
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
,这是否会破坏构建传递依赖项的目的?Bar
Foo_ROOT
Bar_ROOT
CMAKE_PREFIX_PATH
我的 Pkg 已经知道它是在哪里找到的,所以我应该解析/设置Foo_ROOT
并将Bar_ROOT
其放入我的PkgConfig.cmake
文件中吗?