如何解读Nixpkgs依赖项平台对照表?箭头与偏移量解析
Nix依赖类型对照表解析
先明确三个核心平台定义
在理解对照表前,得先搞懂Nix中三个平台的含义:
- Build平台:用来构建当前derivation(包)的机器/环境
- Host平台:当前derivation最终要运行的机器/环境
- Target平台:仅在交叉编译时存在,指当前derivation编译出的程序要运行的机器/环境(非交叉编译时和Host平台一致)
箭头X → Y的含义
表格第一列的X --> Y,表示该依赖的Host平台是X,Target平台是Y(这里的X、Y都是相对于当前derivation的三个平台而言)。举几个例子:
build --> build:这个依赖的Host是当前derivation的Build平台,Target也是当前derivation的Build平台——简单说就是“在Build平台上运行、用来构建其他Build平台依赖的工具”build --> host:这个依赖的Host是Build平台,Target是当前derivation的Host平台——也就是“在Build平台上构建,最终在Host平台运行的构建工具”(比如编译用的编译器)host --> target:这个依赖的Host是当前derivation的Host平台,Target是当前derivation的Target平台——交叉编译时,用来构建Target平台程序的Host端依赖
偏移量的计算规则
偏移量是用两个数字组成的元组,用来量化依赖的Host/Target平台相对于当前derivation的Host/Target平台的位置关系,规则很直接:
- 用
-1代表Build平台,0代表Host平台,1代表Target平台 - 偏移元组的第一个数:依赖的Host平台对应的数字
- 偏移元组的第二个数:依赖的Target平台对应的数字
比如:
depsBuildBuild对应build --> build,所以偏移是(-1, -1)(依赖Host是Build(-1),依赖Target是Build(-1))buildInputs对应host --> target,偏移是(0, 1)(依赖Host是Host(0),依赖Target是Target(1))
对照表的阅读方法
每一行对应Nix derivation中一个具体的依赖属性,你可以把它看成“属性用途+平台关系+偏移标识”的映射:
- 第一列:明确该依赖的Host/Target平台关系
- 第二列:告诉你在写derivation时要把这类依赖放在哪个属性里(比如构建Host平台程序的Build端工具,要放在
nativeBuildInputs) - 第三列:用数字量化平台关系,方便依赖传播时自动转换类型
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

