Russian Qt Forum

Программирование => Общий => Тема начата: kambala от Июнь 01, 2019, 14:31



Название: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: kambala от Июнь 01, 2019, 14:31
Здравствуйте. Есть небольшой С++ проект (использует qbs, если это поможет), который линкуется с внешней библиотекой, поставляемой  в бинарном виде (ее изменения не интересуют). Естественно, файл библиотеки разный для разных платформ. Назрел вопрос как лучше хранить эти файлы.

1. просто сложить всё в репозиторий: не нравится, т.к. это просто раздутие репозитория «ненужными» файлами (пользователю винды не нужны файлы Макос и т.п.)
2. залить библиотеки куда-нибудь и скачивать нужную версию после клонирования репозитория/перед сборкой: придется писать скрипты скачивания для curl/wget/и т.д., насколько я понимаю.
3. git submodule? но это ничем не отличается от п. 1, насколько я понимаю, просто лежать будут в другой ветке/репозитории.
4. может поможет замена qbs на cmake, если в последнем есть встроенные средства скачивания?
5. ваш вариант :)


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: Авварон от Июнь 01, 2019, 15:20
Я лично противник того, чтобы система _сборки_ что-либо скачивала. Система _сборки_ должна собирать=) Хотя в Qbs есть такой тикет (https://bugreports.qt.io/browse/QBS-62)
Желание запихнуть всё в одно место понятно, но порочно.
К примеру, деб-пакеты собираются при помощи debuild, который читает зависимости из файлика debian/control. По очевидным причинам, эти зависимости не подойдут для венды/макоси/рпм дистрибутива.

На одной из работ был написан питоновский скрипт, который читает yaml* файлик зависимостей и качает через питоновский curl пакеты и распаковывает их в папочку. Юзался он соответственно на маке/венде, на линуксе юзался нативный споосб через deb-пакеты.
Плюс такого подхода в том, что он работал с любой системой сборки (основных было две - cmake и qbs).

* файлик для примера:
Код:
name: foo
version: 0.0.0
desc: >
  BarBaz
depends:
  zlib: {dist: win32}
  curl: {dist: win32}
  libyaml:
  zeromq3:
  cmake:


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: kuzulis от Июнь 01, 2019, 19:25
пункты 1 и 3.

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


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: kambala от Июнь 04, 2019, 13:16
файл зависимостей и скрипт на питоне — это слишком много на данный момент, к тому же в винде нет питона по умолчанию :)

с submodule я сначала не подумал, что можно сделать по модулю на каждую платформу, и уже в qbs прописать какой модуль стягивать (вроде ж можно сказать гиту, чтоб по умолчанию не качал все доступные?). спасибо!

еще как вариант рассматривал что-то типа скрипта «если нет файла, скачать», который под виндой будет вызываться через PowerShell, а в остальных случаях через sh/curl.


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: lit-uriy от Июнь 07, 2019, 07:16
Судя по проектам на Гитхабе, народ делает каталог с исходниками программы, каталог distrib\ (и т.п.), а в нём подкаталоги по имени целевой платформы, в этих каталогах конфиги систем сборки свойственной для целевой платформы, ну и, видимо, эти системы сборки умеют докачать файлы библиотек и т.п.


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: ksk- от Июнь 07, 2019, 14:55
Выглядит так, будто бы тебе нужен менеджер пакетов. Попробуй Conan (https://conan.io/index.html (https://conan.io/index.html)).

Но раз бинарь меняться не будет, то лично я бы не парился и хранил всё просто в какой-нибудь папке "3rd-party", например (первый пункт).


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: ksk- от Июнь 07, 2019, 14:57
4. может поможет замена qbs на cmake

Это не будет лишним в любом случае. )


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: _Bers от Июнь 08, 2019, 12:20
Выглядит так, будто бы тебе нужен менеджер пакетов. Попробуй Conan (https://conan.io/index.html (https://conan.io/index.html)).

Но раз бинарь меняться не будет, то лично я бы не парился и хранил всё просто в какой-нибудь папке "3rd-party", например (первый пункт).

+1


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: kambala от Июнь 08, 2019, 23:08
нет, менеджер пакетов в данном случае не нужен :)

всем спасибо за ответы. воспользуюсь п. 1 как самым простым.


Название: Re: хранение бинарных зависимостей в кросс-платформенном проекте
Отправлено: zhbr от Июнь 22, 2019, 06:13
У себя используем 1 и 3. вот пример подобного сабмодуля https://bitbucket.org/planarllc/planar.tp.easy_profiler/wiki/Home

сабмодуль содержит в себе бинарники для всех необходимых ос и компиляторов. бинарники складываются в LFS.

в зависимом это этого сабмодуля проекте делаем include(<путь_к_директории_с_easy_profiler>/easy_profiler.pri). внутри pri-файла идёт разруливание - какие бинарники использовать в текущем окружении.

таким образом. клонирование происходит на этапе клонирования проекта, а не на этапе сборки. база git сама не пухнет, так как бинарные файлы в LFS. и да у нас qmake, а не qbs