Cargo 在使用“--workspace”编译后使用“-p”重新编译工作区中的包

问题描述 投票:0回答:1

一般来说,我使用以下方式编译工作区中的所有内容: 工作区目录中的

cargo build
,或使用
cargo build --workspace

但是,如果我随后使用

cargo build -p package
编译特定包或从该包的目录运行
cargo build
,它会重新编译它,而实际上它应该完全缓存,对吗?

看来重新运行的东西大多与宏有关...重新编译

syn
serde_derive
等...

是否认为这些宏包需要重新编译,因为它们可能会给出不同的结果?我觉得如果我们想要可重现的构建,情况真的不应该如此!

我该怎么做才能防止货物像这样重新编译?

(这是运行 Raspbian 10 的树莓派 4 上的货物 1.51.0)

rust rust-cargo
1个回答
0
投票

当不同的软件包具有不同的功能集时,可能会发生这种情况。当

cargo build --workspace
运行时,依赖项是通过启用的功能的联合构建的。当使用
-p package-name
时,仅使用该包所需的功能,导致重新编译依赖项,其中某些功能未打开。

如果我运行

cargo build --bin package-name
,重新编译的板条箱数量会少得多,尽管仍然有一些。

Rust 论坛上有一个关于此问题的简短讨论。

© www.soinside.com 2019 - 2024. All rights reserved.