选择文件列表作为构建输入
selecting a list of files as build input
我想将要包含在我的构建 src
中的文件数量限制为 select 几个。
不允许将文件列表直接传递给 src
或 srcs
作为存档或目录。
我找不到执行此操作的函数,并且 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.typeOf
和 builtins.trace
来调试此类问题。
我想将要包含在我的构建 src
中的文件数量限制为 select 几个。
不允许将文件列表直接传递给 src
或 srcs
作为存档或目录。
我找不到执行此操作的函数,并且 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.typeOf
和 builtins.trace
来调试此类问题。