这个依赖平台表应该如何解读?

问题描述 投票:0回答:1

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

我想知道如何阅读表格?

“主机 → 目标”和“构建 --> 构建”中的箭头是什么意思?

偏移量是如何计算的?

dependencies nix nixos package-management
1个回答
0
投票

所以这与你的其他问题非常接近这里,事实证明我的新答案也回答了这个问题。长话短说,如果您不构建编译器,那么您只想使用

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
架构进行编译的风格。

更多详情这里

© www.soinside.com 2019 - 2024. All rights reserved.