https://nixos.org/manual/nixpkgs/stable/#ssec-stdenv-dependent-reference説明する
他の転移的(非直接)下流の依存関係も直接依存関係として要求する場合、依存関係が伝播されると言われています。 [サム]
依存関係は必ずしも以前と同じタイプの依存関係に伝播されるのではなく、プラットフォームルールが一貫性を維持するためにそのタイプに伝播されることに注意することが重要です。依存関係の伝播の正確な規則を決定するために、最初に各依存関係に複数の三項数(ビルドの場合は-1、ホストの場合は0、ターゲットの場合は1)を割り当てて、ホストとターゲットをキャプチャする依存関係の種類を示します。プラットフォームの状況はそれぞれによって異なります。派生ホストとターゲットプラットフォームの「オフセット」。次の表は、利用可能なさまざまな組み合わせをまとめたものです。
host → target attribute name offset build --> build depsBuildBuild -1, -1 build --> host nativeBuildInputs -1, 0 build --> target depsBuildTarget -1, 1 host --> host depsHostHost 0, 0 host --> target buildInputs 0, 1 target --> target depsTargetTarget 1, 1
テーブルの読み方を知りたいです。
「Host → Target」と「Build --> Build」の矢印はどういう意味ですか?
オフセットはどのように計算されますか?
答え1
Nixパッケージ管理の文脈では、パッケージ間の依存関係は関係ネットワークとして理解できます。分析してみましょう。
1.依存軸:
- プラットフォーム関係:Windows、Mac、Linuxなど、さまざまなコンピュータシステムやプラットフォームを検討してください。プログラムは、各プログラムでスムーズに実行するために異なることが必要な場合があります。
- 拡散:連鎖反応みたいですね。場合によっては、パッケージAにパッケージBが必要で、パッケージCにパッケージAが必要な場合、パッケージCには間接的にパッケージBが必要です。
2. ホストとターゲットプラットフォームを理解します。
- ホストプラットフォーム:これはパッケージをビルドするための基本的な環境と同じです。
- ターゲットプラットフォーム:これはパッケージが実行される環境です。
3.フォームの説明と例:
Mac(ホストプラットフォーム)で「CoolApp」というプログラムを構築するとしましょう。このプログラムが正常に動作するには、さまざまなライブラリが必要です。この表は、どのライブラリが必要であり、プラットフォーム上で互いにどのように関連しているかを理解するのに役立ちます。
「ビルド - >ビルド」(depsBuildBuild、-1、-1):CoolAppには、ビルドプロセス中に使用されるいくつかの特定のライブラリが必要だと想像してください。これは、CoolAppの作成中にのみ必要なビルディングブロックと同じです。
"ビルド-->ホスト"(nativeBuildInputs, -1, 0):これはCoolAppのビルドプロセス中に必要なツールまたはライブラリですが、Mac環境に固有のものです。
「ビルド - >ターゲット」(depsBuildTarget、-1、1):これは、Linuxなどの他のプラットフォームでアプリケーションを実行するためにCoolAppのビルド中に必要なライブラリです。
「ホスト - >ホスト」(depsHostHost、0、0):CoolAppを実行するには、いくつかのMac専用ライブラリが必要だと想像してください。まるでMacの世界に住んでいる友達と同じです。
「ホスト - >ターゲット」(buildInputs、0、1):これは、Linuxなどの他のプラットフォームで実行するためにCoolAppに必要な追加ライブラリです。
「ターゲット - >ターゲット」(depsTargetTarget、1、1):これはLinuxでCoolAppを実行するために必要なライブラリである可能性がありますが、Macでのビルドプロセス中には必要ないかもしれません。
4. 実際の影響:
これらの依存関係を理解すると、Nixパッケージマネージャが環境を正しく設定するのに役立ちます。これにより、CoolAppがMac上で構築され、Linuxで使用されている場合、どの部分も失うことなく、両方の場所でスムーズに実行するために必要なものがすべて揃っていることが保証されます。
したがって、この表は、CoolAppがさまざまなプラットフォームで完全に実行できるようにするために、パッケージマネージャにどの部分(ライブラリまたは依存関係)を含める必要があるのか、パズルのどこに対応するのかを示すロードマップのようなものです。