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

时间:2019-05-25 19:08:12

标签: nix nixpkgs

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

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

注意:我正在使用rustPlatform构建器,但我认为这并不重要。

1 个答案:

答案 0 :(得分:0)

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来调试此类问题。