nix - 选择文件列表作为构建输入
问题描述
我想将包含在我的构建中的文件数量限制为src
少数几个。直接将文件列表传递给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
调试此类问题。
推荐阅读
- flutter - 我无法居中定位小部件
- jenkins - 无论如何/插件我们只能在特定时间触发构建并且不应该能够触发任何其他时间?
- c# - Visual Studio 测试平台安装程序任务错误
- angular - 如何修复“Node Sass 在当前环境中找不到绑定”。运行 npm run build 时
- c++ - 如何在 GLFW 中为游戏引擎做一个正确的输入类
- javascript - 为每个返回一个值?
- c# - 我需要将值传递给另一个 ActionResult
- cassandra - 如何定期将 Cassandra CDC 更改刷新到磁盘?
- solr - 自动缩放在 solr7.4 中不起作用 - autoaddreplica
- c# - 如何更改 ReSharper 标题文本注释样式