Структура проекта Git и CMake, внешние библиотеки и пакеты

Я относительно неопытен в проектах CMake, а также в Git.

Если я использую внешние библиотеки, например. в моем случае JsonCpp и OpenVR, это плохой подход, чтобы поместить пакеты/библиотеки в структуру моего проекта и отправить их с моими собственными материалами в мой репозиторий Git?

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

Спасибо за вашу помощь.


person muella91    schedule 21.11.2019    source источник


Ответы (3)


это плохой подход, чтобы поместить пакеты/библиотеки в структуру моего проекта и отправить их с моими собственными материалами в мой репозиторий Git?

Да, это.

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

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

В целом это довольно ненадежно, это обычная практика - распределять зависимости отдельно и искать их на этапе настройки.

person arrowd    schedule 21.11.2019

Вам нужен менеджер зависимостей. Для C++ Conan вполне удобен. Или вы можете использовать maven.

cmake также есть решение для этого ExternalProject.

Я никогда не настраивал ничего из этого, но я использовал Conan и Maven (кто-то другой все настроил).

Есть и другие инструменты, вам нужно просто выбрать один.

person Marek R    schedule 21.11.2019

Я бы даже сказал, что связывание зависимостей с вашим проектом - это плохая практика, полная остановка, независимо от того, какую систему сборки/генератор вы используете. И, как уже упоминалось arrowd, вам нужно будет разрешить зависимости ваших зависимостей, которые могут червей, которые вы не хотите открывать.

В частности, CMake имеет довольно мощную систему управления зависимостями с помощью команды find_package. , а также мощный интерфейс для pkg-config через FindPkgConfig и pkg_check_modules

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

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

Я рекомендую посмотреть это и это в обзоре CMake, а затем провести небольшое исследование по использованию find_package и как написать свои собственные модули поиска, если те, которые вы используете, не предоставляют ни модуля поиска, ни pkg-config файл.

person Pesho_T    schedule 21.11.2019