#c #deployment #dependencies #package-managers
#c #развертывание #зависимости #менеджеры пакетов
Вопрос:
Я работал над различными проектами с открытым исходным кодом, в которых задействованы следующие библиотеки C (и другие):
- MuPDF
- Повышение
- FreeType
- GTKmm
- библиотеки hummus PDF
- LibTiff
- LibXML2
- Wt xpdf
- xpdf
- Poppler
- ZLib
Настройка этих библиотек часто занимает много времени при их настройке на чистой машине. Есть ли способ автоматизировать захват всех зависимостей на компьютере с Windows?
Ближайший, который я нашел, — это CMake, который проверяет, установлены ли / извлечены зависимости перед созданием файлов вашего проекта. Но я не нашел ничего для Windows, что могло бы проанализировать список зависимостей, а затем загрузить установить необходимые версии.
Пожалуйста, порекомендуйте диспетчер пакетов для Windows с обновленными библиотеками C .
Ответ №1:
Vcpkg, проект Microsoft с открытым исходным кодом, помогает получить библиотеки C и C в Windows.
Комментарии:
1. Они используют CMake… Я просто раздражен, что это ни в коем случае не кросс-платформенный. В прошлый раз использовал Conan, но количество их пакетов на самом деле не увеличивалось: / — РЕДАКТИРОВАТЬ: на самом деле я думаю, что этот инструмент может быть тем, что я искал. Проверит это. 1
Ответ №2:
Взгляните на диспетчер пакетов Hunter, когда вы уже используете CMake для настройки своего проекта. Он автоматически загружает и создает ваши зависимости с помощью всего нескольких строк дополнительного кода cmake. Hunter основан на целях экспорта и импорта cmake.
Например, если вы хотите использовать библиотеку GoogleTest в своем проекте на основе cmake, вы должны добавить следующие строки в корневой каталог CMakeLists.txt
# file root CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
# To get hunter you need to download and include a single cmake file
# see documentation for correct name
include("../gate.cmake")
project(download-gtest)
# set the location of all your hunter-packages
set( HUNTER_ROOT_DIR C:/CppLibraries/HunterLibraries )
# This call automaticall downloads and compiles gtest the first time
# cmake is executed. The library is then cached in the HUNTER_ROOT_DIR
hunter_add_package(GTest)
# Now the GTest library can be found and linked to by your own project
find_package(GTest CONFIG REQUIRED)
add_executable(foo foo.cpp)
target_link_libraries(foo GTest::main)
Не все перечисленные вами библиотеки доступны как «пакеты-охотники», но проект имеет открытый исходный код, поэтому вы можете создавать пакеты-охотники для своих зависимостей и передавать их в проект. Вот список библиотек, которые уже доступны в качестве пакетов hunter.
Это не решит все ваши проблемы «из коробки», потому что вам нужно создать пакеты-охотники для ваших зависимостей. Но существующий фреймворк уже выполняет большую часть работы, и лучше использовать его вместо того, чтобы использовать половинчатое самодельное решение.
Комментарии:
1. Я думаю, что это самое близкое к тому, что я искал ~ 5 лет назад!
Ответ №3:
Biicode — это новый менеджер зависимостей для C . В нем также есть несколько перечисленных вами библиотек. Biicode автоматически сканирует ваши исходные файлы на наличие зависимостей, загружает и создает их. Смотрите Здесь очень классный пример, который включает Freeglut.
Ответ №4:
Что я нашел:
Ближе всего к тому, что я ищу:
К сожалению, в его репозитории нет ни одной из библиотек, которые мне требуются.
Итак, я закончил получать большинство библиотек из проекта KDE4windows и создавать остальные на заказ.
Ответ №5:
Npackd — это менеджер пакетов для Windows. Существует репозиторий по умолчанию для библиотек C , а также сторонний репозиторий для 64-разрядных библиотек Visual Studio 2010. Boost и zlib уже находятся в репозитории по умолчанию. Если вы решите использовать Npackd, вы можете сообщить о проблеме, если вам нужны другие библиотеки.
Ответ №6:
В Windows нет диспетчера пакетов. Перейдите на веб-сайт библиотек и загрузите сборки Windows, если они их предоставляют.
Есть несколько альтернатив, но не без недостатков:
- Cygwin: предоставляет хороший менеджер пакетов, но все двоичные файлы созданы для Cygwin, что означает, что они работают медленнее, чем их собственный эквивалент, любые приложения, использующие их, будут ссылаться на библиотеку DLL Cygwin, и вы застряли с этой лицензией. Кроме того, использование собственного Win32 API иногда вызывает проблемы из-за несовместимости с предлагаемой эмуляцией POSIX. Только для GCC.
- MinGW-get: является менеджером пакетов для MinGW.org компилятор. Это собственные двоичные файлы Win32, но только для использования с GCC MinGW.
Для чего-либо, связанного с Visual Studio или MinGW-w64, нет диспетчера пакетов или чего-то похожего.
Комментарии:
1. Я боялся, что это так; Я оставлю вопрос открытым, на случай, если кто-то его нашел / создал…
2. По сути, необходимо поддерживать множество копий двоичных файлов: для каждой msvcr * dll, для каждого выпуска Visual Studio (они нарушают совместимость c ABI с каждым выпуском (SP)), для каждой версии MinGW (которая технически может связываться со всеми версиями msvcr * dll). Я не думаю, что это возможно без нагрузок и нагрузок бессмысленной работы. Я знаю, это очень прискорбно.
Ответ №7:
В Windows нет управления пакетами. В Windows разработчики обычно используют полномасштабные среды разработки «все и вся» и сами создают монолитные приложения, поставляемые со всеми зависимостями.