我需要一個不受特定語言或構建系統束縛的依賴關係管理器。我研究過幾種優秀的工具(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