Вот одно из решений.Вы можете использовать файл верхнего уровня CMakeLists.txt
, чтобы связать все проекты вместе.Таким образом, в вашей структуре каталогов это было бы размещено здесь:
bin/
output/
src/libA/
src/libB/
src/appB/
CMakeLists.txt <--- Top-level CMakeLists.txt
Ваш файл CMakeLists.txt
верхнего уровня (как родственный элемент для каталога src
) может выглядеть следующим образом:
cmake_minimum_required(VERSION 3.11)
# Add your dependencies in the order you want them to build.
add_subdirectory(src/libA)
add_subdirectory(src/libB)
add_subdirectory(src/appB)
Поскольку каждый из каталогов src
имеет свой собственный файл CMakeLists.txt
, вот пример каждого из них в отдельности.
Вы можете настроить LibA как общую библиотеку с CMake с помощью CMakeLists.txt
файл в src/libA
:
project(LibA_Project)
add_library(LibA SHARED sourceA.cpp ... more sources here ...)
Затем CMake перейдет в каталог src/libB
для настройки LibB.Вот как может выглядеть файл src/libB/CMakeLists.txt
:
project(LibB_Project)
# Create a shared library for LibB as well.
add_library(LibB SHARED sourceB.cpp ... more sources here ...)
# Link LibA to LibB as a dependency.
target_link_libraries(LibB LibA)
Наконец, CMake перейдет в каталог src/appB
.Вот этот файл CMakeLists.txt
:
project(AppB_Project)
# Create the executable AppB.
add_executable(AppB main.cpp ... more sources here ...)
# Link LibA and LibB to AppB as dependencies.
target_link_libraries(AppB LibA LibB)
Этот подход можно легко расширить, включив в него больше подпроектов (например, LibC, LibD, AppE и т. Д.), Если необходимо.