特定の言語やビルド システムに縛られていない依存関係マネージャーが必要です。いくつかの優れたツール (Gradle、Bazel、Hunter、Biicode、Conan など) を調べましたが、私の要件を満たすものはありませんでした (以下を参照)。Git Submodules と Mercurial Subrepos も使用しました。
私のニーズは、Meeting C++ 2014 での Daniel Pfeifer によるプレゼンテーションで詳しく説明されています。
- パッケージマネージャーだけじゃない
- ビルド済みまたはソースの依存関係をサポート
- ローカルでダウンロードまたは検索できます - 不要なダウンロードはありません
- さまざまな方法を使用して取得します (つまり、ダウンロード、または VCS クローンなど)。
- システム インストーラーと統合 - lib がインストールされているかどうかを確認できます
- ソースコードを変更する必要はありません
- ビルドシステムを調整する必要はありません
- クロスプラットフォーム
私が追加するさらなる要件または説明:
- サードパーティおよび/またはバージョン管理された依存関係に適していますが、バージョン管理されていない依存関係および/または共同開発された依存関係を指定することもできます (おそらく git/mercurial ハッシュまたはタグによって指定されます)。
- 指定されたフェッチ動作をオーバーライドして、選択した別の依存関係バージョンを使用するメカニズムを提供します。
- 依存関係ストアを手動で設定する必要はありません。冗長または循環的な依存関係を回避する方法として、中央の依存関係の場所に反対しているわけではありません。ただし、リポジトリのクローンを作成し、依存関係マネージャーを呼び出してすべてをビルドするトップレベルのビルド スクリプトを実行するという単純さが必要です。
- ビルド システムを変更する必要はないという要件にもかかわらず、明らかに、一部のトップレベル ビルドは依存関係マネージャーを使用し、それらの依存関係を個々のビルドにフィードする必要があります。この要件は、個々のビルドが依存関係マネージャーを認識してはならないことを意味します。たとえば、C++ パッケージに CMake を使用する場合、その CMakeLists.txt を変更して特別なものにする必要はありません。依存関係を見つけるための関数呼び出し。むしろ、最上位のビルド マネージャーは依存関係マネージャーを呼び出して依存関係を取得し、CMake が従来の方法 (つまり、find_package または add_subdirectory) で使用できる引数を提供する必要があります。言い換えれば、最上位のビルドと依存関係マネージャーの作業を手動で行うオプションが常にあるべきであり、個々のビルドは違いを認識すべきではありません。
あった方がよい:
- 依存関係が配置された場所を見つけるために、事後的に依存関係マネージャーに問い合わせる方法。これにより、VCS フックを作成して、共同開発されたソース リポジトリの依存関係の依存関係メタデータのハッシュを自動的に更新できます。(サブモジュールやサブレポのように)。