Представьте себе общий проект с несколькими компонентами:
Теперь предположим, что Интернет зависит от io, который зависит от базового, и все эти вещи находятся в одном репо и имеют CMakeLists.txt, чтобы создать их как общие библиотеки.
Как мне настроить все, чтобы я мог собрать три приложения, если каждое из них является необязательным и может отсутствовать во время сборки?
Одна из идей состоит в том, чтобы иметь пустой каталог «apps» в главном репо, и мы можем клонировать в него любые репозитории приложений. Наш основной файл CMakeLists.txt может использовать GLOB для поиска всех каталогов приложений и их создания (не зная заранее, сколько их будет). Проблемы с этим подходом включают:
make
, поэтому, если вы добавляете новое приложение, вы должны снова запустить cmake
. Общая концепция похожа на традиционную. рекурсивный проект CMake, но модули нижнего уровня не обязательно заранее знают, какие из них будут их использовать. Тем не менее, я не хочу требовать от пользователя установки библиотек нижнего уровня в фиксированное место (например, / usr / local / lib
). Однако я хочу, чтобы один вызов make
заметил изменения зависимостей во всем проекте, так что если я создаю приложение, но изменяю одну из низкоуровневых библиотек, все будет соответствующим образом перекомпилировано.