选择文件列表作为构建输入

selecting a list of files as build input

我想将要包含在我的构建 src 中的文件数量限制为 select 几个。 不允许将文件列表直接传递给 srcsrcs 作为存档或目录。 我找不到执行此操作的函数,并且 builtins.filterSource 似乎对我不起作用(不知道为什么 - 包含过滤文件的中间推导最终为空):

    files = [
        ./Cargo.toml
        ./Cargo.lock
        ./cpu.rs
    ];
    src = builtins.filterSource (p: t: builtins.elem p files) ./.;

注意:我正在使用 rustPlatform 生成器,但我认为它不重要。

filterSource 将完整路径作为字符串传递。 为了将列表的路径与其进行比较,您需要将字符串转换为路径:

$ cd /Users/fghibellini/code/nix
$ nix-instantiate --eval -E './a == "/Users/fghibellini/code/nix/a"'
false
$ nix-instantiate --eval -E './a == (/. + "/Users/fghibellini/code/nix/a")'
true

即以下代码应该可以正常工作:

files = [
    ./Cargo.toml
    ./Cargo.lock
    ./cpu.rs
];
src = builtins.filterSource (p: t: builtins.elem (/. + p) files) ./.;

您可以使用 builtins.typeOfbuiltins.trace 来调试此类问题。