jorikfon
@jorikfon
Руководитель и разработчик в МИКО

Как организовать хранение библиотек и хидеров от которых зависит наш проект?

Разрабатываем различные библиотеки на С++.
Код библиотек храним в репозитории.
Но почти всегда, библиотеки имеют зависимости.
CURL, POCO, OPENSSL, BOOST, ASTERISK, PJSIP и т.д.

Как правильно организовать хранение вспомогательных библиотек, чтобы каждый раз можно было собрать из репозитория версию своей либы, которая будет использовать определенную версию зависимых библиотек. Не помещать же их все в наш репозиторий.

Сейчас используем сетевую папку примерно с такой структурой

S:\_SharedLib\BOOST\boost_1_57_0
S:\_SharedLib\BOOST\boost_1_60_0
S:\_SharedLib\POCO\1.6.0
S:\_SharedLib\POCO\1.4.7
S:\_SharedLib\OPENSSL\openssl-1.0.2a
S:\_SharedLib\OPENSSL\openssl-1.0.2e
S:\_SharedLib\OPENSSL\openssl-1.0.2f


Есть какая то практика по этому поводу?
  • Вопрос задан
  • 672 просмотра
Пригласить эксперта
Ответы на вопрос 3
Vapaamies
@Vapaamies
Психанул и снес свои ответы козлам, не отмечающим…
И чтобы хранилась история, чтобы мы могли взять версию своей библиотеки за прошлый год и быстро ее собрать со всеми зависимостями. Сейчас используем сетевую папку просто.

В SVN есть такая штука, как svn:externals. В Git и Мercurial тоже наверняка есть, а вот в CVS вряд ли.

Суть в том, что в вашем хранилище хранится ссылка на другое (внешнее) хранилище, и при развертывании рабочей копии клиент ходит по этим "символическим ссылкам" и рекурсивно по ним всё скачивает. В SVN подчиненные рабочие копии будут выглядеть как обычные, у них будет своя папка .svn.

Нужно только, чтобы внешнее хранилище было такого же типа, как и ваше. Скажем, SVN не сможет скачать из внешнего Git. Если вы качаете библиотеки не из хранилищ, а просто архив с сайта, заведите у себя отдельное хранилище для библиотек и складывайте туда все нужные версии.
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Можно поступать по разному.
Использовать скрипт, с зависимостяти, или просто вставить это в Makefile отдельным таргетом, чтобы можно было вытащить все зависимости.
Или использовать submodules -
https://git-scm.com/book/ru/v1/Инструменты-Git-Подмодули

И перейти с использования CVS и SVN на git или mercurial!
Ответ написан
Nipheris
@Nipheris Куратор тега C++
CMake решит большинство ваших проблем:

https://cmake.org/cmake/help/v3.6/command/find_pac...
CMake:How To Find Libraries

Большинство - кроме проблемы установки/управления зависимыми библиотеками. Т.е. CMake попытается найти в системе нужную версию библиотеки, но установить вы её должны сами. В *nix - системах с этим неплохо справляется системный пакетный менеджер, в Винде всё плохо (т.е. делаем руками).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы