我想将要构建的src
中包含的文件数限制为几个。
不允许将文件列表直接传递到src
或srcs
,因为存档或目录是必需的。
我找不到执行此操作的函数,builtins.filterSource
似乎对我不起作用(不知道为什么-包含过滤文件的中间派生最终为空):
files = [
./Cargo.toml
./Cargo.lock
./cpu.rs
];
src = builtins.filterSource (p: t: builtins.elem p files) ./.;
注意:我正在使用rustPlatform
构建器,但我认为这并不重要。
答案 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.typeOf
和builtins.trace
来调试此类问题。