【问题标题】:Why `cargo build` immediately after `cargo check` recompiles some dependencies?为什么在`cargo check`重新编译一些依赖项之后立即`cargo build`?
【发布时间】:2021-09-11 03:00:36
【问题描述】:

cargo buildcargo check 重新编译许多(但不是全部)依赖项之后立即出现的可能原因是什么?

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 = []

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    cargo check 不是构建。它只是检查您的代码是否可以编译,但不一定构建任何东西。请参阅here 了解更多信息。

    所以cargo build 将需要实际构建一些板条箱,而在cargo check 期间未构建的地方。其他 crates 可能需要完全编译才能检查(例如,在 build.rs 脚本或过程宏中使用的 crates),因此在您运行 cargo build 时已经编译。

    【讨论】:

    • 经过一番调查,看起来cargo buildrustc--emit= 参数添加了link 选项,这导致它在目标目录中生成.rlib 文件,不像在check 的情况下。 cargo check 似乎正在完成所有工作,但在最后一刻停止并且没有将其工作保存到磁盘:)
    猜你喜欢
    • 2022-09-13
    • 2019-09-10
    • 2020-08-15
    • 2021-08-26
    • 1970-01-01
    • 2017-02-04
    • 2022-08-21
    • 2019-07-23
    • 2021-07-16
    相关资源
    最近更新 更多