Поскольку CMake позволяет получить один и тот же результат кучей разный способов, то я постараюсь описать подход, который использовал бы я сам.
Структура:
packages_test
├── .git
├── cmake // Папка с доп. CMake скриптами если в этом есть необходимость
├── build // Результат сборки
│ └─ res.exe // Исполняемый файл
├── CMakeLists.txt // Конфигурация сборки проекта
├── src
│ ├─ main.cpp // Точка входа, main()
│ └─ ...// Прочие файлы проекта
├── dependencies // Зависимости (подключаются через механизм submodule)
│ ├─ vendor_package_0 // У каждой зависимости своя внутренняя организация
│ └─ vendor_package_1
└── test // Тесты
├── CMakeLists.txt
└── src
└── test_main.cpp
Теперь, как мы будем добавлять зависимости? Это зависит от того где расположены библиотеки и как они собираются. В вашем случае, как я понимаю, все vendor_package_x представляют из себя CMake проекты с использованием
add_library и получаемые из git submodule'ей. Это значит, что мы можем использовать
add_subdirectory для импорта их target'ов.
| Note: find_package чаще всего используется для поиска установленных в системе библиотек с помощью FindXXX.cmake скриптов
Главный CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(playrix_project VERSION 1.0 LANGUAGES CXX)
add_executable(playrix src/main.cpp)
# Импортируем наши зависимости. Это не приводит к сборке, но просто позволяет нам использовать target'ы этих проектов.
add_subdirectory(dependencies/vendor_package_0)
add_subdirectory(dependencies/vendor_package_1)
# Забудьте про include_directories и link_directories! В современном CMake следует использовать targets и properties.
# Опредеяем зависимости нашего проекта
target_link_libraries(playrix # Имя нашего executable'а
PRIVATE # Определяет область видимости зависимостей для внешних проектов
vendor_package_0_target # Настоящее имя target'а надо смотреть в vendor_package_0 CMakeLists.txt (add_library)
vendor_package_1_target
)
target_link_libraries позаботится о том, чтобы собрать все зависимости, слинковать (если надо) их с нашим проектом и инклюднуть необходимые директории. Теперь можно собирать проект!
Дополнительные ссылки: