Мне интересно, как разумно управлять построением и установкой для некоторых наших сторонних зависимостей C++ на Linux(Ubuntu). В настоящее время я настроил git-lfs со всеми необходимыми сжатыми сторонними источниками. Затем я использую написанный мною сценарий оболочки для установки всех необходимых системных зависимостей, а затем распаковываю и создаю нужную библиотеку. Этот сценарий оболочки также заботится о настройке всех путей, чтобы наш исходный код мог легко связаться с библиотеками сторонних производителей.
Пример команды для нашего скрипта ./ установить opencv или ./установить все
Тем не менее, за несколько месяцев скрипт стал довольно большим и иногда прерывается, когда определенные библиотеки уже установлены или другие незначительные проблемы. Таким образом, я хотел бы заменить его чем-то более умным и полезным. В настоящее время я изучаю написание какого-то скрипта python, но просто изменение языка с shell на python не является большим преимуществом. Поэтому я ищу, есть ли какие-либо конкретные библиотеки python, которые могут помочь мне в управлении этими библиотеками.
Я изучал такие вещи, как chef и другие автоматизированные сборки, но это слишком для небольшого проекта, над которым я работаю.
Мне было интересно, что другие люди использовали для этого 3rd party management stuff, так как, к сожалению, в C++ нет ничего похожего на pip.
Я использую
jhbuild
для такого рода вещей (если я понимаю, что вы делаете правильно). Он вышел из проекта GNOME (они используют его, чтобы построить весь рабочий стол из исходного кода), но его легко настроить для любого набора проектов.jhbuild
Упакованный в недавнем Ubuntus работает хорошо.Вы пишете немного XML, чтобы описать каждый проект: где скачать исходники, какие патчи применять, какие флаги настроить для использования, какие проекты это зависит от и так далее; Затем, когда вы вводите
jhbuild build mything
его работает, что строить и в каком порядке и получает с ним. Если вы редактируете исходный файл в одном из проектов, составляющих ваш стек, он будет перестраивать только затронутые части.Например, у меня есть это для fftw3, отличная библиотека быстрого преобразования Фурье:
С, вероятно, очевидными значениями. Это строится из выпускного тарбола, но он также может строиться из git. Он доволен
cmake
проектами.jhbuild
написан на Python, поэтому его легко настроить. Благодаря GNOME, многие общие библиотеки включены.Я фактически использую его для создания двоичных файлов Windows. Вы можете настроить его для сборки всего с помощью кросс-компилятора, а затем поместить его в Docker. Это делает его ОДН-вкладышем для любого для того чтобы мочь построить большое и сложное применение на (почти) любой платформе. Конечно, вы можете использовать его для автоматизированных ночных сборок.
Возможно, есть вещи и получше, но для меня это сработало хорошо.