https://nixos.org/manual/nixpkgs/stable/#ssec-stdenv-dependency-reference说
当依赖关系的某些部分被传播时,就被认为是传播的。 其他传递(非直接)下游依赖项也需要它 作为直接依赖。 [3]
需要注意的是,依赖关系并不一定是 传播为与之前相同的依赖关系,但是 而是作为相应的排序,以便平台规则仍然有效 向上。为了确定依赖传播的确切规则,我们开始 通过为每个依赖项分配几个三进制数字(-1 表示 build,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
我想知道如何阅读表格?
“主机 → 目标”和“构建 --> 构建”中的箭头是什么意思?
偏移量是如何计算的?
所以这与你的其他问题非常接近这里,事实证明我的新答案也回答了这个问题。长话短说,如果您不构建编译器,那么您只想使用
nativeBuildInputs
来获取编译时所需的依赖项(cmake
、pkg-build
等),并使用 buildInputs
来获取其他所有内容。
对于更高级的用例,您看到的表有两个冗余列:
offset
只是第一列的数字翻译,其中:
-1
=build
(构建程序的机器的架构),0
=host
(运行程序的机器的架构),1
=target
(如果您构建编译器,将运行您的程序编译的程序的机器的体系结构)。所以
host -> target
与设置元组 (0,1)
是一样的,它非正式地意味着依赖项将在 host
上运行,并且(如果它是编译器)它应该为架构编译东西 target
。
中间的列是调用将相应元组归因于依赖项的命令:例如:
nativeBuildInput = [ gcc ];
将把
build -> host
与 gcc 关联起来,即指出所需的 gcc
的风格是在 build
架构上运行、针对 host
架构进行编译的风格。
更多详情这里。