@monokrome какие инструменты для вложения проектов? Существовали ли инструменты в 2014 году, когда я написал ответ? Если нет, пожалуйста, просто прокомментируйте и не отрицайте ответ, который был точным на момент написания. Спасибо! :-)

тавьте себе общий проект с несколькими компонентами:

основнойИ.О.Webприложение-априложение-бприложение-с

Теперь предположим, что web зависит от io, который зависит от basic, и все эти вещи находятся в одном репо и имеют CMakeLists.txt для их построения в качестве разделяемых библиотек.

Как мне настроить все, чтобы я мог собрать три приложения, если каждое из них является необязательным и может отсутствовать во время сборки?

Одна из идей заключается в том, чтобы в главном репо была пустая директория «apps», и мы можем клонировать в нее любые репозитории приложений. Наш основной файл CMakeLists.txt может использовать GLOB, чтобы найти все каталоги приложений и построить их (не зная заранее, сколько их будет). Проблемы с этим подходом включают в себя:

По-видимому, CMake не повторяется, когда вы просто говоритеmake, так что если вы добавляете новое приложение, вы должны запуститьcmake очередной раз.Это налагает определенную структуру на человека, делающего сборку.Не очевидно, как можно создать два клона из одного приложения и построить их оба отдельно для одной и той же сборки библиотеки.

Общая концепция похожа на традиционный рекурсивный проект CMake, но там, где низкоуровневые модули не обязательно заранее знают, какие высокоуровневые модули будут их использовать. Тем не менее, я не хочу требовать от пользователя установки библиотек нижнего уровня в фиксированном месте (например,/usr/local/lib). Я, однако, хочу один вызовmake замечать измененные зависимости по всему проекту, так что если я собираю приложение, но изменил одну из библиотек низкого уровня, все будет перекомпилировано соответствующим образом.

Ответы на вопрос(6)

Ваш ответ на вопрос