Какие зависимости можно предположить установить на машине сборки? - PullRequest
2 голосов
/ 10 августа 2011

У нас есть проект, который потребует связывания с libcurl и libxml2, среди других библиотек.Похоже, у нас есть две стратегии управления этими зависимостями:

  1. Попросите каждого разработчика установить эти библиотеки в «обычных» местах, например, /usr/lib или

  2. Включите источники этих библиотек в выделенную папку в дереве исходных текстов проекта.

Подход 1 требует от всех, чтобы эти библиотеки были установлены в их системе, нокажется подход, используемый многими проектами с открытым исходным кодом.В таких проектах сборка обнаружит, что эти библиотеки отсутствуют и не будут работать.

Подход 2 может сделать дерево проекта неуправляемо большим в некоторых случаях и значительно увеличить время компиляции.Кроме того, этот подход, очевидно, может быть принят слишком далеко.Например, я бы не стал размещать компилятор под деревом проекта (верно?).

Каковы лучшие практики с внешними зависимостями?Может ли / должен ли каждый разработчик иметь определенные библиотеки, установленные для сборки проекта?Или считается, что лучше включить все зависимости в дерево проекта?

Ответы [ 3 ]

1 голос
/ 10 августа 2011

Не беспокойтесь об их точном расположении в вашем коде. Их обнаружение должно обрабатываться используемым компилятором / компоновщиком (или пользователем путем установки переменных), если они распространены. Для очень необычных зависимостей (или с настроенными / измененными файлами) вы можете включить их в свой источник (если возможно из-за лицензирования и т. Д.).

Если вы хотите, чтобы вам было удобнее, вы должны использовать какой-нибудь скрипт (например, configure или CMake) для настройки / создания используемых файлов сборки. Например, CMake позволяет вам устанавливать различные пакеты (libcurl и libxml2 в вашем примере) как необязательные и обязательные. При создании проекта он попытается найти их, если это не удастся, он спросит пользователя. Это дополнительный шаг, который может сделать сборку более громоздкой, но это также сделает загрузку быстрее (меньший источник), а также упростит обновление (все, что вам нужно сделать, это перестроить вашу программу).

Таким образом, в общем, я бы следовал подходу 1, если используется особый / редкий / настроенный материал, подход 2.

0 голосов
/ 11 августа 2011

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

0 голосов
/ 10 августа 2011

Нормальным способом является наличие соответствующих зависимостей и их установка разработчиком. Позже, если проект упакован в .deb или .rpm, эти пакеты потребуют установки соответствующих библиотек, исходные пакеты будут иметь пакеты -devel в качестве зависимостей.

...