Мне нужен менеджер зависимостей, который не привязан к определенному языку или системе сборки. Я изучил несколько отличных инструментов (Gradle, Bazel, Hunter, Biicode, Conan и т. Д.), Но никто не удовлетворяет моим требованиям (см. Ниже). Я также использовал Git Submodules и Mercurial Subrepos.Язык/платформа/независимый менеджер зависимостей
Мои потребности хорошо описаны в presentation Даниэль Пфайфер на совещании C++ 2014. Резюмируя цели этого инструмента зависимостей (обсуждаемый @ 18: 55 связанного видео):
- Не только не пакет менеджера
- Поддержки предварительно построенный или зависимости источника
- может скачать или найти локально - нет ненужных загрузок
- разгонов с использованием различных методов (то есть скачать или VCS клонов, и т.д.)
- Интеграция с установщиком системы - можно проверить, если Lib установлен
- Нет необходимости адаптировать исходный код каким-либо образом
- Нет необходимости адаптировать система сборки
- Кроссплатформенность
Дополнительные требования или разъяснения, я хотел бы добавить:
- Подходит для третьей стороны и/или версированы зависимости, но и способны указать не-версии и/или совместно разработанных зависимостей (возможно, заданных git/mercurial hash или tag).
- Предоставляет механизм, позволяющий переопределить указанное поведение выборки для использования некоторой альтернативной версии зависимостей по моему выбору.
- Не нужно вручную настраивать хранилище зависимостей. Я не против центрального местоположения зависимостей, чтобы избежать избыточных или круговых зависимостей. Однако нам нужна простота клонирования репо и выполнение некоторого сценария построения верхнего уровня, который вызывает менеджера зависимостей и создает все.
- Несмотря на то, что мне не нужно изменять мою систему сборки, очевидно, что некоторые сборки верхнего уровня должны обладать менеджером зависимостей, а затем передавать эти зависимости отдельным сборкам. Требование означает, что индивидуальные сборки не должны знать менеджера зависимостей. Например, если вы используете CMake для пакета C++, мне не нужно изменять его CMakeLists.txt, чтобы сделать специальными функциональными вызовами для поиска зависимостей. Скорее, менеджер сборки верхнего уровня должен вызвать менеджера зависимостей для извлечения зависимостей, а затем предоставить аргументы, которые CMake может использовать обычными способами (например, find_package или add_subdirectory). Другими словами, я всегда должен иметь возможность вручную выполнять работу менеджера сборки и менеджера зависимости верхнего уровня, а отдельная сборка не должна знать разницу.
Nice-на-есть:
- Путь опрашивать менеджер зависимостей после-фактум, чтобы найти, где зависимость помещался. Это позволило бы мне создавать привязки VCS для автоматического обновления хэша в метаданных зависимостей совместно разработанных зависимостей источника репо. (Подобно подмодулям или субреподам).
Я думаю, что ваши реквизиты слишком много для любого менеджера пакетов C/C++, может быть чрезвычайно сложно достичь. Конан может быть самым близким, предоставить несколько из них и быть рядом с другими, но да, он не будет полностью удовлетворять ваши потребности, как описано. Если вы хотите получить более подробную информацию или обсудить функции, просто свяжитесь. – drodri
@drodri - Спасибо. Я свяжусь напрямую. Чтобы повторить, я ищу больше, чем менеджер пакетов C/C++. Мне нужен менеджер зависимостей, который может собирать гетерогенный набор зависимостей. Таким образом, менеджер сборки верхнего уровня может нести ответственность за выборку, настройку и создание документов Go или Rust или Sphinx и т. Д. – Ken
Я вижу. Просто некоторые указатели, поскольку вы говорите о ржавчине и идете, на всякий случай. Некоторая интеграция конан-ржавчины: http://blog.conan.io/2016/06/23/Rust-cargo-and-Conan-C_and_C++-package-manager-integration.html. Как конан обрабатывает go-lang: http://docs.conan.io/en/latest/examples/go.html. – drodri