библиотеки — Зависимости от внешних библиотек в проекте c ++

В настоящее время я пытаюсь настроить проект на C ++, б, который использует Luabind библиотека. К сожалению, в моем дистрибутиве, а именно в Arch, эта библиотека отсутствует в официальных репозиториях, а библиотека в AUR устарела и не может скомпилироваться.

Учитывая, что мне нужна библиотека только для этого проекта, я подумал, что мог бы создать изолированную среду, похожую на python virtualenv, создав библиотеку, а затем установив (скопировав) включаемые файлы и получившиеся двоичные файлы в 2 подкаталогах моего проекта под названием include а также libсоответственно, которые я добавлю к связыванию и включу пути при сборке. Я понимаю, почему распространение библиотек с вашим проектом плохо: например, безопасность и исправление ошибок. Тем не менее, распространение DLL практически повсеместно осуществляется в Windows (что я мог бы сделать, если бы я кросс-компилировал), и многие проекты, такие как игры в Linux, как правило, упаковывают свои библиотеки, чтобы избежать несоответствий между дисками. Более того, если когда-нибудь понадобится исправленная или разветвленная версия библиотеки, я сомневаюсь, что когда-нибудь найду ее в любом официальном репо.

Итак, мой вопрос:

  • Является ли то, что я описал выше, обычной практикой? Должен ли я сделать это так?
  • Если нет, то каково наиболее согласованное решение этой проблемы?

НОТА: Я использую Cmake для автоматизации сборки, если это важно

РЕДАКТИРОВАТЬ: Этот вопрос слегка перекрывается с моим.

2

Решение

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

Используя CMake, легко автоматизировать сборку и компоновку внешнего исходного кода, используя ExternalProject модуль.

Увидеть http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html за полезную информацию.

Этот подход имеет несколько преимуществ:

  • вам не нужно включать исходный код библиотеки в ваш репозиторий
  • Вы можете указать на конкретную версию / тег git библиотеки, которая, как вы знаете, работает с вашим программным обеспечением ИЛИ на последнюю версию, если вы уверены, что она не нарушит совместимость
  • вам не нужно писать полный файл CMakeLists.txt, чтобы построить возможно сложную базу кода
  • в конечном итоге вы можете настроить внешний проект для сборки в виде статической библиотеки, чтобы вам не приходилось распространять общие библиотеки
  • Вы можете даже полностью обойти это, если не нужно, пытаясь обнаружить рабочую версию библиотеки в вашей системе с помощью обычного вызова find_package, и использовать только внешний проект, если он не найден.
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]