6

特定の言語やビルド システムに縛られていない依存関係マネージャーが必要です。いくつかの優れたツール (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 フックを作成して、共同開発されたソース リポジトリの依存関係の依存関係メタデータのハッシュを自動的に更新できます。(サブモジュールやサブレポのように)。
4

1 に答える 1