构建特定的板条箱不会重复使用完整工作区构建的工件。

5

我使用带有项目的货物工作区。当我运行时

cargo build

从工作区根目录构建所有项目成员(如有错误请纠正)。
然后,当我想要从工作区构建特定项目时,我使用。
cargo build -p my_project_1

看起来它开始构建我的项目1的依赖项。尽管所有依赖项都应该在第一次阶段构建。

如何使用在第一阶段完成的依赖项构建缓存?


对我来说,它确实会重用构建产物。是否有任何依赖项会使用不同的标志进行构建,仅针对该特定软件包而非整个工作区? - undefined
1
只有在工作区的Cargo.toml文件中包含default-members键时,才会构建“default-members”。 - undefined
1
你能提供一些[mre],也就是一些不重复使用构建产物的Cargo.toml和源代码的组合吗? - undefined
这是一个可复现的例子:https://github.com/PRQL/prql/issues/3098(虽然不算是最简单的...) - undefined
1个回答

1
看起来最近的货物更新已经解决了这个问题, 现在cargo build应该会产生如下的错误信息:
error: failed to compile `doomed-to-fail v0.1`, intermediate artifacts can be found at '/some/tmp/directory'
    To reuse those artifacts, set the environment variable `CARGO_TARGET_DIR` to that path.

即使使用旧版本的cargo,它没有打印出额外有帮助的错误信息,你仍然可以设置CARGO_TARGET_DIR来重用现有的构件。我可以确认这在cargo 1.70.0上是有效的(在使用MacPorts的macOS系统上)。
CARGO_TARGET_DIR=/var/folders/fp/abc…xyz/T/cargo-installABC123 cargo install git-hist

91个依赖项在实际故障之前没有按预期重新构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接