У меня есть проект CMake с двумя подмодулями A
и B
.B
зависит от A
.В подмодуле B
я хотел бы искать A
, используя find_package(A CONFIG)
.Мой минимальный (не) рабочий пример:
CMakeLists.txt
cmake_minimum_required(VERSION 3.13)
project(AB)
add_subdirectory(B)
add_subdirectory(A)
A/CMakeLists.txt:
message(STATUS "CMake: A")
add_library(A SHARED A.hpp A.cpp)
target_include_directories(A PUBLIC "${CURRENT_SOURCE_DIR}")
install(TARGETS A EXPORT AA LIBRARY DESTINATION lib/)
export(TARGETS A NAMESPACE AA:: FILE ${CMAKE_BINARY_DIR}/A/AConfig.cmake)
export(PACKAGE AA)
A/A.hpp (some non-sense code)
A/A.cpp
B/CMakeLists.txt
find_package(A CONFIG)
message(STATUS "---> ${A_FOUND}")
add_library(B B.hpp B.cpp)
target_link_libraries(B AA::A)
B/B.hpp (some non-sense code)
B/B.cpp
A/CMakeList.txt
правильно выдает AConfig.cmake
.Но, насколько я понимаю, это происходит после (!) find_package(A CONFIG)
и, следовательно, AConfig.cmake
не найдено.Любая идея, как заставить find_package()
запускаться после выполнения A
?
Конечно, я знаю, что в этом примере find_package
не имеет никакого смысла.В моем реальном проекте подмодули являются внешним программным обеспечением, которое я не хочу модифицировать (в моем случае - Parallels STL и TBB).