为什么在 `cargo check` 之后立即运行 `cargo build` 会重新编译某些依赖项?

4

cargo check 之后立即运行 cargo build,为什么会重新编译许多(但不是所有)依赖项?可能的原因是什么?

Cargo.toml

[package]
name = "greeter"
version = "0.1.0"
authors = ["Near Inc <hello@near.org>"]
edition = "2018"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
near-sdk = "3.1.0"

[profile.release]
codegen-units = 1
# Tell `rustc` to optimize for small code size.
opt-level = "z"
lto = true
debug = false
panic = "abort"
# Opt into extra safety checks on arithmetic operations https://stackoverflow.com/a/64136471/249801
overflow-checks = true

[workspace]
members = []

请参考以下链接:https://github.com/rust-lang/cargo/issues/2904#issuecomment-632292650 - ArtemGr
1个回答

1

cargo check 不是构建过程,它只是检查您的代码是否能够编译,但不一定会构建任何内容。请参见此处以了解更多信息。

因此,cargo build 需要实际构建一些未在 cargo check 中构建的 crate。其他 crate 可能需要完全编译才能进行检查(例如在 build.rs 脚本中使用的 crate 或由过程宏使用的 crate),因此当您运行 cargo build 时已经编译好了。


经过一些调查,看起来 cargo build 会将 link 选项添加到 --emit= 参数中的 rustc,这导致它在目标目录中生成一个 .rlib 文件,与 check 情况不同。 cargo check 似乎正在做所有的工作,但在最后一刻停止并没有将其工作保存到磁盘上 :) - DeLorean88

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