遵循现代 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,这是否会破坏构建传递依赖项的目的?BarFoo_ROOTBar_ROOTCMAKE_PREFIX_PATH
我的 Pkg 已经知道它是在哪里找到的,所以我应该解析/设置Foo_ROOT并将Bar_ROOT其放入我的PkgConfig.cmake文件中吗?