Как управлять зависимостями в C++
У меня есть большой репозиторий с множеством отдельных модулей (исполняемых и т. Д. Файлов), некоторые из которых зависят от другого (и зависят от сторонних библиотек, которых нет в репо).
Я хочу иметь возможность извлекать только один модуль в этом хранилище и иметь возможность собирать его независимо.
Кстати, я использую scons в качестве инструмента сборки в среде Linux и Windows.
Я видел на этом сайте (и больше), что есть два подхода к этой проблеме:
создайте в каждом репозитории модулей каталог "зависимость" или любое подобное имя и задайте все репозитории, от которых зависит этот модуль, в качестве под-репозиториев в этом каталоге.
Проблемы:
- это не решает проблему сторонних, которые не обрабатываются в моем SCM.
- это делает процедуру сборки намного медленнее
- уродливо, много кратных в моем базовом проекте dir.
создать "двоичный репозиторий" или "построить репозиторий артефактов" и управлять с ним зависимостями.
Это выглядит как лучшее решение для меня, но я не понимаю, как это сделать практически.
Я видел nuget для разработчиков C# windows (а также немного C++, но только в windows) и ivy / maven для разработчиков java, но не могу найти какой-либо инструмент, который справится с этим для C++.
Мой вопрос - как создать управление зависимостями с кодом C++?
2 ответа
Зависимости в C++ управляются с помощью заголовочных файлов и предварительных объявлений. Как правило, вы должны отдавать предпочтение предварительным объявлениям, насколько это возможно, и включать заголовочные файлы, когда нет возможности обойти это. Обычно это дает вам преимущество в том, что до тех пор, пока вы не измените интерфейс класса, перекомпиляция должна касаться только одного объектного файла.
Я подозреваю, что вы также хотите что-то более сложное, связанное с настройкой вашей сборки. Это имеет очень мало общего с C++. Если вы хотите получить лучший ответ для этого, будьте более точны в отношении настроек сборки.
Плагин Maven Nar (Native Archive) может помочь вам в этом. Это плагин для Maven, который позволяет создавать собственные архивы на платформе. Затем вы можете использовать стандартную функцию зависимостей maven для зависимостей c/ C++.