Как мне связать библиотечные зависимости из моего git репозитория? - PullRequest
0 голосов
/ 19 января 2020

Я сделал проект на github, который использует несколько библиотек, таких как glew, glm, sdl2 или sdl2_image. Я использую их, помещая их в папку с именем «external», и собирая их из источника с помощью CMake.

Моя проблема заключается в попытке настроить эту «внешнюю» папку сразу после клонирования репозитория, чтобы она Легко для пользователя скомпилировать проект.

  • Я мог бы сохранить внешнюю папку как есть на моем репозитории github, но было бы неудобно получать новые обновления библиотек, и я не Я не хочу, чтобы это выглядело так, будто я "краду собственность" библиотек. И я действительно не хочу разрешать использование контроля версий для этих файлов.
  • Я мог бы использовать git субмодулей, чтобы указывать на нужные коммиты, которые я хочу, но это делает загрузку очень тяжелой (выборка каждого репо примерно в 10-20 раз больше, чем папка релиза zip). И мне все равно не нужна информация об управлении версиями, так как я не работаю с этими зависимостями и не буду вносить изменения.

Два разумных (но не оптимальных) варианта, которые я вижу для меня скачивание zip-файла зависимостей, которые я бы сделал сам, или выборка зависимостей одна за другой и распаковка их в нужных местах с помощью сценария.

Но создание сценария добавит зависимости, такие как wget и его Windows эквивалент, и я не знаю, где я мог бы сохранить zip-файл, поскольку github, кажется, не предоставляет места для хранения дополнительных файлов (новая ветвь?).

  • Предоставляет ли github какой-либо способ связать репозиторий с внешними выпусками репо?
  • В противном случае, где было бы лучше хранить дополнительные файлы, относящиеся к репозиторию, которые не должны быть частью контроля версий?

1 Ответ

1 голос
/ 20 января 2020

Это звучит как работа для FetchContent : довольно недавняя пара скриптов, которые должны быть в состоянии делать именно то, что вы хотите. То есть загрузите либо скомпилированные двоичные zip-файлы с фиксированных URL-адресов, либо даже извлеките и соберите последний коммит в данной ветви.

FetchContent особенно полезен, так как он делает все это во время конфигурации, пропуская пару проблем, альтернатива, ExternalProject , всегда была для меня, которая только выбирает и компилирует проект в время сборки.

Из примеров на FetchContent:

include(FetchContent)
FetchContent_Declare(
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG        release-1.8.0
)

FetchContent_MakeAvailable(googletest)
# you now magically have the googletest cmake targets available 
# at configuration time and can link against them.

Альтернативой этому является использование conan системы управления пакетами, хотя это гораздо сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...