1

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

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

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

4

1 回答 1

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

于 2019-05-26T10:52:19.260 回答