Как управлять зависимостями в C++

У меня есть большой репозиторий с множеством отдельных модулей (исполняемых и т. Д. Файлов), некоторые из которых зависят от другого (и зависят от сторонних библиотек, которых нет в репо).

Я хочу иметь возможность извлекать только один модуль в этом хранилище и иметь возможность собирать его независимо.

Кстати, я использую scons в качестве инструмента сборки в среде Linux и Windows.

Я видел на этом сайте (и больше), что есть два подхода к этой проблеме:

  1. создайте в каждом репозитории модулей каталог "зависимость" или любое подобное имя и задайте все репозитории, от которых зависит этот модуль, в качестве под-репозиториев в этом каталоге.

    Проблемы:

    1. это не решает проблему сторонних, которые не обрабатываются в моем SCM.
    2. это делает процедуру сборки намного медленнее
    3. уродливо, много кратных в моем базовом проекте dir.
  2. создать "двоичный репозиторий" или "построить репозиторий артефактов" и управлять с ним зависимостями.

Это выглядит как лучшее решение для меня, но я не понимаю, как это сделать практически.

Я видел nuget для разработчиков C# windows (а также немного C++, но только в windows) и ivy / maven для разработчиков java, но не могу найти какой-либо инструмент, который справится с этим для C++.

Мой вопрос - как создать управление зависимостями с кодом C++?

2 ответа

Зависимости в C++ управляются с помощью заголовочных файлов и предварительных объявлений. Как правило, вы должны отдавать предпочтение предварительным объявлениям, насколько это возможно, и включать заголовочные файлы, когда нет возможности обойти это. Обычно это дает вам преимущество в том, что до тех пор, пока вы не измените интерфейс класса, перекомпиляция должна касаться только одного объектного файла.

Я подозреваю, что вы также хотите что-то более сложное, связанное с настройкой вашей сборки. Это имеет очень мало общего с C++. Если вы хотите получить лучший ответ для этого, будьте более точны в отношении настроек сборки.

Плагин Maven Nar (Native Archive) может помочь вам в этом. Это плагин для Maven, который позволяет создавать собственные архивы на платформе. Затем вы можете использовать стандартную функцию зависимостей maven для зависимостей c/ C++.

Другие вопросы по тегам