2016-08-19 5 views
1

特定の言語やビルドシステムに依存しない依存関係マネージャが必要です。私はいくつかの優れたツール(Gradle、Bazel、Hunter、Biicode、Conanなど)を調べましたが、私の要件を満たしていないものはありません(下記参照)。私はGit SubmodulesとMercurial Subreposも使用しました。言語/プラットフォーム/ビルドに依存しない依存マネージャ

私のニーズを十分に(18 @議論:リンクされたビデオの55):この依存ツールの目標を要約する会議C++ 2014でダニエル・ファイファーによってpresentationに記述されている

  • だけではなく、パッケージマネージャ
  • 事前に構築されたサポートまたはソースの依存関係は、ダウンロードしたり、ローカルで見つけることができます - 不要なダウンロード
  • の様々な方法(すなわち、ダウンロード、またはVCSクローンを使用して取得し、システムインストーラ付きなど)
  • 統合 - libには
  • どのような方法でクロスプラットフォーム
ビルドシステム
  • を適合させる必要性を全くソースコードを適応しないする必要はありませんインストールされているかどうかを確認することができます私が追加し

    さらに要件や明確化:

    • サードパーティおよび/またはバージョン付きの依存関係のために適した、だけでなく、特定することができます(おそらくgit/mercurialのハッシュやタグで指定されている)バージョン管理されていない、および/または共同開発された依存関係です。
    • 私が選択した代替依存バージョンを使用するために、指定されたフェッチ動作をオーバーライドするメカニズムを提供します。
    • 依存関係ストアを手動で設定する必要はありません。私は冗長または循環依存性を避ける方法として中央の依存関係の場所に反対していません。しかし、リポジトリのクローンを作成し、依存マネージャを起動してすべてをビルドするトップレベルのビルドスクリプトを実行する必要があります。
    • 私は自分のビルドシステムを変更する必要はありませんが、明らかにいくつかのトップレベルビルドで依存マネージャを使用し、それらの依存関係を個々のビルドに供給する必要があります。この要件は、個のビルドが依存関係マネージャを認識してはならないことを意味します。たとえば、CMakeをC++パッケージに使用する場合、CMakeLists.txtを変更して、特別なの依存関係を見つけるための関数呼び出しを行う必要はありません。むしろ、トップレベルのビルドマネージャは依存関係マネージャを呼び出して依存関係を取得し、CMakeが従来の方法(つまり、find_packageまたはadd_subdirectory)で使用できる引数を提供する必要があります。言い換えれば、私は常に手作業でトップレベルのビルドと依存マネージャの作業を行う必要があり、個々のビルドは違いを知るべきではありません。
    ニースツー持っ

    • 依存関係が置かれた場所を見つけるために、事後の依存性マネージャを調べるための方法。これにより、共同開発されたソースリポジトリの依存関係の依存性メタデータのハッシュを自動的に更新するVCSフックを作成することができます。 (サブモジュールやサブレポのように)。
  • +1

    私はあなたの必要条件がC/C++パッケージマネージャにとって多すぎると思いますが、実現するのは非常に難しいかもしれません。 Conanは最も近いものであり、それらのいくつかを提供し、他のものに近いかもしれませんが、それは説明されているようにあなたのニーズを完全に満たすものではありません。詳細を知りたい場合や機能について話し合う場合は、ご連絡ください。 – drodri

    +0

    @drodri - ありがとう。私は直接連絡します。繰り返しますが、私はC/C++パッケージマネージャ以上のものを探しています。異種の依存関係の集合を集めることができる依存関係マネージャーを私は望んでいます。そこでトップレベルのビルドマネージャーが、GoやRust、Sphinxなどのドキュメントの取得、設定、ビルドを担当する可能性があります。 – Ken

    +0

    です。ちょうどいくつかのポインタ、錆について話をして、ちょうどの場合に行ってください。いくつかのコーンと錆の統合:http://blog.conan.io/2016/06/23/Rust-cargo-and-Conan-C_and_C++-package-manager-integration.html。 conanがgo-langを扱う仕組み:http://docs.conan.io/en/latest/examples/go.html – drodri

    答えて

    0

    さまざまな言語(つまりnpm)のパッケージマネージャと比較して、利用可能なテクノロジを徹底的に検索した後、私自身の依存マネージャツールで実行しても、私はConanを解決しました。 Conanに深く入り込んだ後、私はそれが箱の外のほとんどの要件を満たし、容易に拡張可能であることがわかります。

    Conanを調べる前に、私はBitBakeを私が探していたモデルとして見ました。しかし、それはLinuxだけであり、組み込まれたLinuxディストリビューションに重点を置いています。コナンは、本質的に同じレシピはとしてBB特徴と本当にここでのクロスプラットフォーム

    でいる私の要件と私はコナンで発見された:

    • だけでなく、パッケージマネージャ
    • は、事前に構築されたサポートまたはソースの依存関係

    Conanはクラシックリリースまたはデベロッパー依存関係をサポートしており、ソースのパッケージ化も可能です。特定の構成/設定を持つバイナリがレジストリ(または "Conan"の "repository")に存在しない場合、バイナリはソースから構築されます。

    • ダウンロードしたり、ローカルで見つけることができます - 不要なダウンロード
    • システムインストーラとの統合は - LIBがインストールされている場合

    を確認することはできませんコナンはキャッシュとしてローカルレジストリを維持します。依存関係を共有する独立プロジェクトは、高価なダウンロードやビルドをやり直す必要はありません。

    Conanは、宣言された依存関係の代わりにシステムパッケージを見つけることを妨げません。プレフィックスパスを渡すようにビルドスクリプトを記述すると、個々の依存ファイルのパスを即座に変更することができます。

    • は、依存関係をフェッチする方法を完全に制御することがレシピのsource機能を実現する種々の方法(即ち、ダウンロード、またはVCSクローンなど)

    を使用して取得します。 Conanは、ソースのダウンロード/複製を行うレシピをサポートしているか、レシピ自体でソースを「スナップショット」することができます。

    • どのような方法でソースコードを適応する必要はありません

    ビルドシステムを適応する必要はありませんコナンは、選択したビルドシステムによって依存関係の消耗品を作るために発電機の様々なサポートしています。特定のビルドシステムからの不可知論は、コナンの本当の勝利であり、最終的にはBazel、Buckarooなどのような依存関係管理が煩雑になるのです。クロスプラットフォーム パイソン

    • 。チェック。

    • サードパーティ製および/またはバージョン管理下の依存関係に適していますが、非バージョン管理および/または共同開発の依存関係(おそらくgit/mercurialハッシュまたはタグで指定)を指定することもできます。

    は心の中でsemverで構築されたが、バージョンとして任意の文字列識別子を使用することができます。さらに、 userchannelがパッケージバージョンのネームスペースとして機能します。

    • 私が選んだいくつかの代替依存バージョンを使用するように指定されたフェッチの動作をオーバーライドするためのメカニズムを提供します。

    あなたはinstallコマンドでそれを含めないことによって、特定の依存関係のフェッチを防ぐことができます。または、生成されたプレフィックス情報を変更または上書きして、ディスク上の別の場所を指すようにすることもできます。

    • 依存関係ストアを手動で設定する必要はありません。私は冗長または循環依存性を避ける方法として中央の依存関係の場所に反対していません。しかし、リポジトリのクローンを作成し、依存マネージャを起動してすべてをビルドするトップレベルのビルドスクリプトを実行する必要があります。 私は自分のビルドシステムを変更する必要はないはずですが、明らかにトップレベルのビルドで依存マネージャを使用し、それらの依存関係を個々のビルドに供給する必要があります。要件は、個々のビルドが依存関係マネージャーを認識してはならないことを意味します。たとえば、CMakeをC++パッケージに使用する場合、CMakeLists.txtを変更して、依存関係を特定するための特別な関数呼び出しを行う必要はありません。むしろ、トップレベルのビルドマネージャは依存関係マネージャを呼び出して依存関係を取得し、CMakeが従来の方法(つまり、find_packageまたはadd_subdirectory)で使用できる引数を提供する必要があります。言い換えれば、私は常に手作業でトップレベルのビルドと依存マネージャの作業を行う必要があり、個々のビルドは違いを知るべきではありません。

    ローカルレジストリに依存するキャッシュ。これはシームレスです。 Conanのドキュメントに表示される正規のパターンは、ビルドスクリプトにConan固有の呼び出しを追加することですが、これは避けることができます。もう一度、コンシューマプレフィックスパスや入力引数にビルドスクリプトを記述すると、情報を渡すことができ、Conanをまったく使用することはできません。私はConan CMakeの発電機がこれをよりエレガントにするために少しの作業を使うことができると思います。フォールバックとして、コナンは私自身の発電機を書くことができます。

    • 依存関係が置かれた場所を見つけるために、事後の依存性マネージャを調べるための方法。これにより、共同開発されたソースリポジトリの依存関係の依存性メタデータのハッシュを自動的に更新するVCSフックを作成することができます。 (サブモジュールやサブレポのように)。

    ジェネレータは、これらの場所を指します。そして、Pythonの完全な機能を使って、これをあなたの心のコンテンツにカスタマイズすることができます。

    現在、共同開発の依存プロジェクトが私の最大の疑問です。つまり、Conanがトラッキングを容易にするために何かを持っているのかどうかわかりませんが、このカスタマイズを追加するためのフックがあると確信しています。私はコナンで見つかった

    他のもの:

    • コナン私は、開発中に必要なツールチェーンをダウンロードしたり、構築する能力を提供します。 Python virtualenvを使用して、システムのインストールを汚染することなく、これらのカスタム環境を簡単に有効/無効にします。
    関連する問題