Куда помещать third-party libraries в VS
От: b0r3d0m  
Дата: 09.06.17 01:42
Оценка:
сап.

Вечный вопрос -- что делать со сторонними библиотеками, использующимися в проекте, написанном на C++ в Microsoft Visual Studio?

Я вижу следующие варианты решения данного вопроса, каждый со своими плюсами и минусами:

1. Поместить исходники библиотек в репозиторий проекта.
Плюсы:
+ Полный контроль над доступом ко всем зависимостям.
+ Скорость сборки проекта.
+ Возможность подредактировать исходники библиотек под нужды проекта.
Минусы:
— Увеличение размера репозитория.
— Если несколько проектов в пределах одного репозитория требуют разные версии одной и той же библиотеки, то мы будем вынуждены предоставлять несколько копий данной библиотеки.
— Неясная ситуация с НЕ header-only библиотеками. Кто должен их собирать? Специальный build-скрипт? Или .lib / .dll файлы таких библиотек тоже надо помещать в репозиторий проекта? В таком случае мы столкнёмся с ещё большим увеличением размера репозитория (это всё-таки бинарники, которые, в общем случае, ещё и для разных версий IDE должны быть собраны).

2. Ничего не помещать в репозиторий проекта, а вместо этого написать инструкцию (README.md) на тему того, откуда и как доставать / собирать все необходимые проекту зависимости.
Плюсы:
+ Библиотеки не будут занимать место в репозитории.
Минусы:
— Перед первой сборкой проекта придётся выполнить больше ручных действий.
— Отсутствие контроля над доступом к зависимостям, если речь идёт об упоминании сторонних ресурсов в README.md файле (ресурсы стали недоступны -- проект не собрать).

3. Использовать NuGet.
Плюсы:
+ Удобный процесс сборки. Нажал "Build" -- готово.
+ Библиотеки не будут занимать место в репозитории, решается вопрос с разными версиями библиотек.
Минусы:
— Требуемая библиотека может отсутствовать в "стандартном" NuGet-сервере.
— Отсутствие прямого контроля над зависимостями (частично решается поднятием своего собственного NuGet-сервера).
— По сравнению с вариантом, когда все библиотеки хранятся в репозитории проекта, увеличение скорости сборки (но тут всё зависит от расположения NuGet-сервера и размера используемых библиотек).

Что-то забыл?

Что предпочитате вы? Что используется у вас на данный момент в компании, где работаете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.