Управление установкой сторонних библиотек C++

Мне интересно, как разумно управлять построением и установкой для некоторых наших сторонних зависимостей C++ на Linux(Ubuntu). В настоящее время я настроил git-lfs со всеми необходимыми сжатыми сторонними источниками. Затем я использую написанный мною сценарий оболочки для установки всех необходимых системных зависимостей, а затем распаковываю и создаю нужную библиотеку. Этот сценарий оболочки также заботится о настройке всех путей, чтобы наш исходный код мог легко связаться с библиотеками сторонних производителей.

Пример команды для нашего скрипта ./ установить opencv или ./установить все

Тем не менее, за несколько месяцев скрипт стал довольно большим и иногда прерывается, когда определенные библиотеки уже установлены или другие незначительные проблемы. Таким образом, я хотел бы заменить его чем-то более умным и полезным. В настоящее время я изучаю написание какого-то скрипта python, но просто изменение языка с shell на python не является большим преимуществом. Поэтому я ищу, есть ли какие-либо конкретные библиотеки python, которые могут помочь мне в управлении этими библиотеками.

Я изучал такие вещи, как chef и другие автоматизированные сборки, но это слишком для небольшого проекта, над которым я работаю.

Мне было интересно, что другие люди использовали для этого 3rd party management stuff, так как, к сожалению, в C++ нет ничего похожего на pip.

1 ответ

  1. Я использую jhbuildдля такого рода вещей (если я понимаю, что вы делаете правильно). Он вышел из проекта GNOME (они используют его, чтобы построить весь рабочий стол из исходного кода), но его легко настроить для любого набора проектов. jhbuildУпакованный в недавнем Ubuntus работает хорошо.

    Вы пишете немного XML, чтобы описать каждый проект: где скачать исходники, какие патчи применять, какие флаги настроить для использования, какие проекты это зависит от и так далее; Затем, когда вы вводите jhbuild build mythingего работает, что строить и в каком порядке и получает с ним. Если вы редактируете исходный файл в одном из проектов, составляющих ваш стек, он будет перестраивать только затронутые части.

    Например, у меня есть это для fftw3, отличная библиотека быстрого преобразования Фурье:

      <autotools id="fftw3" 
        autogen-sh="configure"
        autogenargs="--disable-static --enable-shared --disable-threads"
        >
        <branch
          repo="fftw"
          module="fftw-3.3.4.tar.gz"
        />
        <dependencies>
          <dep package="libiconv"/>
        </dependencies>
      </autotools>
    

    С, вероятно, очевидными значениями. Это строится из выпускного тарбола, но он также может строиться из git. Он доволен cmakeпроектами. jhbuildнаписан на Python, поэтому его легко настроить. Благодаря GNOME, многие общие библиотеки включены.

    Я фактически использую его для создания двоичных файлов Windows. Вы можете настроить его для сборки всего с помощью кросс-компилятора, а затем поместить его в Docker. Это делает его ОДН-вкладышем для любого для того чтобы мочь построить большое и сложное применение на (почти) любой платформе. Конечно, вы можете использовать его для автоматизированных ночных сборок.

    Возможно, есть вещи и получше, но для меня это сработало хорошо.