Ваш рисунок немного сбивает с толку, потому что после Lib2 есть CMakeLists.txt, который не принадлежит ни одной папке ...
В любом случае: MyPack
- Lib1 и Lib2?
- Lib1 / Lib2 / Subproj1 / Subproj2?
во 2-м случае:
Верхний каталог CMakeLists.txt предоставляет вам доступ к целям Lib1 и Lib2, которые вы можете использовать в SubProject1 и SubProject2, если у вас есть что-то вроде этого:
project(MyPack)
add_subdirectory(Lib1) # Building Lib1
add_subdirectory(Lib2) # Building Lib2
add_subdirectory(SubProject1) # you can use Lib1 & Lib2 targets here
add_subdirectory(SubProject2) # you can use Lib1 & Lib2 targets here
Если это 1-й случай, MyPack - это только Lib1 и Lib2:
Использование find_package (MyPack) означает, что вам нужно создать файл конфигурации и установить () ваш проект:
project(MyPack)
add_subdirectory(Lib1)
add_subdirectory(Lib2)
в Lib1 / CMakeLists.txt:
add_library(lib1 "")
add_library(MyPack::lib1 ALIAS lib1)
[...]
include(GNUInstallDirs)
install(
TARGET lib1
EXPORT MyPackTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
в Lib2 / CMakeLists.txt:
add_library(lib2 "")
add_library(MyPack::lib2 ALIAS lib2)
[...]
include(GNUInstallDirs)
install(
TARGET lib2
EXPORT MyPackTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
Теперь у вас есть lib1 и lib2 в экспорте MyPackTargets. Вы также должны установить этот экспорт.
в любом месте после выше:
install(
EXPORT MyPackTargets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MyPack
NAMESPACE MyPack::
FILE MyPackTargets.cmake # Not sure if this is still needed
)
include(CMakePackageConfigHelpers)
configure_package_config_file(
"Config.cmake.in"
"MyPackConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MyPack
PATH_VARS
CMAKE_INSTALL_LIBDIR
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/MyPackConfigVersion.cmake
VERSION 1.0.0
COMPATIBILITY SameMajorVersion
)
### Install Config and ConfigVersion files
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/MyPackConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/MyPackConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/MyPack"
)
создать файл Config.cmake.in с:
@PACKAGE_INIT@
include( "${CMAKE_CURRENT_LIST_DIR}/MyPackTargets.cmake" )
Теперь, если вы собираете и устанавливаете свой проект MyPack, find_package (MyPack) из другого проекта должен найти его и импортировать созданные вами цели.
Вот некоторая документация:
https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
https://blog.kitware.com/cmake-superbuilds-git-submodules/
Надеюсь, это поможет