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