我需要一个不受特定语言或构建系统束缚的依赖关系管理器。我研究过几种优秀的工具(Gradle,Bazel,Hunter,Biicode,Conan等),但都没有满足我的要求(见下文)。我也使用过Git Submodules和Mercurial Subrepos。语言/平台/构建无关依赖关系管理器
我的需求以及在presentation由丹尼尔·普法伊费尔在会C++ 2014中描述总结这种依赖性工具的目标(讨论@ 18:55所链接的视频的):
- 不只是一个包经理
- 支持预建或源依赖性
- 可以下载或在本地找到 - 没有不必要的下载
- 获取使用各种方法(即下载,或VCS克隆,等)
- 集成与系统安装程序 - 可以检查LIB安装
- 无需以任何方式
- 无需适应构建系统
- 跨平台
进一步的要求或说明我要补充:
- 适合第三方和/或版本化的依赖性,而且还能够指定的非版本化和/或共同开发的依赖关系(可能由git/mercurial hash或tag指定)。
- 提供了一种机制来覆盖指定的获取行为以使用我选择的一些替代依赖项版本。
- 无需手动设置依赖库。我并不反对中央依赖位置作为避免冗余或循环依赖的方法。但是,我们需要克隆repo并执行一些调用依赖关系管理器并构建所有内容的顶级构建脚本。
- 尽管我不需要修改我的构建系统,但显然,某些顶级构建必须使用依赖关系管理器,然后将这些依赖关系提供给各个构建。该要求意味着个人版本不应该知道依赖关系管理器。例如,如果使用CMake作为C++包,我不需要修改它的CMakeLists.txt来使特殊的函数调用来定位依赖关系。相反,顶层构建管理器应调用依赖管理器来检索依赖关系,然后提供CMake以传统方式(即find_package或add_subdirectory)使用的参数。换句话说,我应该始终可以选择手动完成顶层构建和依赖管理器的工作,而单个构建不应该知道其中的差异。
尼斯到有:
- 询问依赖管理后的,其实找一个地方依赖放置的方法。这将允许我创建VCS挂钩来自动更新共同开发的源代码repo依赖关系的依赖元数据中的散列。 (就像子模块或subrepos一样)。
我认为您的必备条件对于任何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。如何柯南句柄去朗:http://docs.conan.io/en/latest/examples/go.html。 – drodri