最新の 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か?
変数andまたはのいずれかを介してFooおよびパッケージの場所を再度指定する必要がある場合、推移的な依存関係を構築する目的を無効にしませんか?BarFoo_ROOTBar_ROOTCMAKE_PREFIX_PATH
私の Pkg は、それが見つかった場所を既に知っているので、それを解析/設定Foo_ROOTしてファイルBar_ROOTに入れる必要がありますか?PkgConfig.cmake