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