Russian Qt Forum
Ноябрь 22, 2024, 09:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: хранение бинарных зависимостей в кросс-платформенном проекте  (Прочитано 6939 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« : Июнь 01, 2019, 14:31 »

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

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Июнь 01, 2019, 15:20 »

Я лично противник того, чтобы система _сборки_ что-либо скачивала. Система _сборки_ должна собирать=) Хотя в Qbs есть такой тикет
Желание запихнуть всё в одно место понятно, но порочно.
К примеру, деб-пакеты собираются при помощи 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:
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 01, 2019, 19:25 »

пункты 1 и 3.

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

ArchLinux x86_64 / Win10 64 bit
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Июнь 04, 2019, 13:16 »

файл зависимостей и скрипт на питоне — это слишком много на данный момент, к тому же в винде нет питона по умолчанию Улыбающийся

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

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Июнь 07, 2019, 07:16 »

Судя по проектам на Гитхабе, народ делает каталог с исходниками программы, каталог distrib\ (и т.п.), а в нём подкаталоги по имени целевой платформы, в этих каталогах конфиги систем сборки свойственной для целевой платформы, ну и, видимо, эти системы сборки умеют докачать файлы библиотек и т.п.
Записан

Юра.
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #5 : Июнь 07, 2019, 14:55 »

Выглядит так, будто бы тебе нужен менеджер пакетов. Попробуй Conan (https://conan.io/index.html).

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

Сообщений: 178



Просмотр профиля
« Ответ #6 : Июнь 07, 2019, 14:57 »

4. может поможет замена qbs на cmake

Это не будет лишним в любом случае. )
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #7 : Июнь 08, 2019, 12:20 »

Выглядит так, будто бы тебе нужен менеджер пакетов. Попробуй Conan (https://conan.io/index.html).

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

+1
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Июнь 08, 2019, 23:08 »

нет, менеджер пакетов в данном случае не нужен Улыбающийся

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
zhbr
Гость
« Ответ #9 : Июнь 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.235 секунд. Запросов: 23.