Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Автоматизированная установка зависимостей С++

Автоматизированная установка зависимостей С++

Поделиться

Страницы: 1 2 Следующая

nuke_birdНовичокwww27 окт. 201712:16#0
Добрый день

Из года в год меня беспокоит одна и та же проблема - как правильно управлять зависимостями проекта?
Поясню: я сторонник идеи, что зависимости (библиотеки и т.п.) должны быть автоматически скачаны и установлены в случае их отсутствия

Хороших пакетных менеджеров я не нашел (пробовал hunter и conan), у них слишком маленькие базы библиотек

Большую часть времени стараюсь оприходовать связку CMake + git submodules, но опять же... Это не очень удобно, да и далеко не все зависимости лежат на github

Как вы работаете с зависимостями проекта? Я хотел бы добиться такого:

git clone <url> project —recursive
cd project
mkdir build
cd build
cmake .. //всё, проект сгенерирован, все зависимости найдены/установлены


Я работаю и под Windows, и под Linux (debian)

loysoПостоялецwww27 окт. 201712:58#1
С этим беда большая. Некоторые используют depot_tools из Chromium.
Тогда DEPS выглядит так, например:
https://github.com/google/shaka-packager/blob/master/DEPS

Есть еще Repo в Android - суть та же самая.

Ghost2Постоялецwww27 окт. 201713:12#2
nuke_bird

> Большую часть времени стараюсь оприходовать связку CMake
Google -> cmake external project

loysoПостоялецwww27 окт. 201713:23#3
nuke_bird
Есть еще https://fuchsia.googlesource.com/jiri
romgermanПостоялецwww27 окт. 201714:51#4
Еще есть нугет, но не шибко популярен для сипипи проектов
nuke_birdНовичокwww27 окт. 201715:11#5
loyso
> С этим беда большая
Да уж, с этим и не поспоришь

Ghost2
> Google -> cmake external project
Видел. Слишком сложно, имхо. Не в том плане что я не понимаю как это работает, а в том что нужно писать много буковок, тем самым усложняя CMakeLists. Более того, зачастую туда вписывают кастомные команды командной строки - всякие там "make"/"make install" автоматически ставят крест на Windows

loyso
> Некоторые используют depot_tools из Chromium.
> Тогда DEPS выглядит так, например:
> https://github.com/google/shaka-packager/blob/master/DEPS
loyso
> nuke_bird
> Есть еще https://fuchsia.googlesource.com/jiri
Не слышал, почитаю что это за звери

romgerman
> Еще есть нугет, но не шибко популярен для сипипи проектов
Ну да, это больше для C#


Самое удобное что я видел - это hunter для cmake:

cmake_minimum_required (VERSION 3.0)

# Emulate HunterGate:
# * https://github.com/hunter-packages/gate
include("../common.cmake")

project(SDL2-test)

hunter_add_package(SDL2)
find_package(SDL2 CONFIG REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main
    SDL2::SDL2main
    SDL2::SDL2)

НО у него огромный косяк - не все библиотеки Hunter знает. А регистрировать их вручную я так и не научился, пахнет геморроем ._.

P.S. Вот линк, мб кто-нибудь не слышал о hunter: https://github.com/ruslo/hunter

nuke_birdНовичокwww27 окт. 201715:13#6
nuke_bird
> CMake + git submodules
Беды этой связки:
1. Подмодули для каждого проекта надо заново качать и компилировать. И не важно что в соседнем проекте используются точно такие же подмодули
2. Не все библиотеки есть в git репозиториях

Проблемы пропадают в случае наличия пакетного менеджера, но что-то в среде С++ нет общепринятых менеджеров ._.

ВасянУчастникwww27 окт. 201715:24#7
nuke_bird
> Более того, зачастую туда вписывают кастомные команды командной строки - всякие
> там "make"/"make install" автоматически ставят крест на Windows
Эти команды работают под Виндой. Надо только папку с Make в переменной PATH прописать.
nuke_birdНовичокwww27 окт. 201715:26#8
Васян
> Эти команды работают под Виндой. Надо только папку с Make в переменной PATH
> прописать.
Чем больше возникает этих "надо" - тем больше мороки, да и вообще смысл слова "автоматизированная" пропадает

Конечно понятно что это необходимо сделать лишь один раз, но все равно найдется чайник, который не знает что такое make и с чем его едят

ВасянУчастникwww27 окт. 201715:37#9
nuke_bird
Ну пусть твоя волшебная собиралка сама качает Make. Ну, или поставляй Make вместе с исходниками своей проги, если тебе так надо, чтобы всё в один клик делало.
Если чел просто виндоюзер, то я бы ему дал бинарники. Если чел кодер (или что-то типа), то он наверняка должен знать, как подредактировать переменную PATH. А если он кодер, но чайник, что не может сделать элементарные действия, то ИМХО, пусть идёт школу заканчивать.

Как бы это всё, что я могу придумать.

Да, я понимаю проблему. Например, скачать и собрать пару десятков зависимостей - это порой занимает пол дня (особенно, если что-то отказывается собираться).

Правка: 27 окт. 2017 15:38

Ghost2Постоялецwww27 окт. 201715:45#10
nuke_bird

> а в том что нужно писать много буковок, тем самым усложняя CMakeLists
CMakeLists внезапно можно бить на подпроекты. Создается папочка 3rdparty, в ней свой CMakeLists.txt.
В основном пишешь add_subdirectory(3rdparty).

> всякие там "make"/"make install"
Зато проекты на CMake туда отлично ложатся. Под него можно переделать почти любой проект, который можно собрать VS.
Берешь исходный код проекта, пишешь к нему CMakeLists и собираешь через external_project_add.

> автоматически ставят крест на Windows
Некоторые проекты принципиально не собираются чем-то кроме gcc. Их можно таскать просто в репе.
Если же используется mingw/cygwin, то вообще никаких проблем.

romgermanПостоялецwww27 окт. 201720:17#11
Вот как раз велосипедистам задание на дом - сделать менеджер пакетов для с++
:^)
nuke_birdНовичокwww27 окт. 201720:46#12
romgerman
> Вот как раз велосипедистам задание на дом - сделать менеджер пакетов для с++
> :^)
Ну вот шутки-шутками, а в каждой шутке есть доля правды :)

До сих пор нет единого, общепризнанного менеджера пакетов

thevladПостоялецwww27 окт. 201721:29#13
nuke_bird
CMake лучшее из того что есть, и я не очень понимаю проблему в том чтобы скачать откуда-то библиотеку и распаковать, шелл скрипт банальный... (если ее нет на гитхабе)
nuke_birdНовичокwww29 окт. 201711:48#14
Все равно решил остановиться на hunter

Проект активно развивается, постоянно добавляют новые пакеты. Сейчас вот сижу разбираюсь как добавить кастомный пакет в их базу. Немного застрял на конфиг-файлах CMake'а

Страницы: 1 2 Следующая

/ Форум / Программирование игр / Общее

2001—2017 © GameDev.ru — Разработка игр