compilation - 为什么 Rust 使用 `cargo build --release` 后跟 `cargo run` 再次编译我的项目?

标签 compilation rust rust-cargo

Rust documentation告诉我们 cargo build 会在编译后创建一个二进制文件,我们可以使用 cargo run 来执行它。如果 cargo run 在执行 cargo build 命令后发现任何变化,它将再次编译代码。它还表示 cargo build --release 命令创建最终程序,它将运行得更快。

我的问题是,为什么当我执行 cargo build --release 时,它会编译代码,这很好。但是,当我执行 cargo run 时,它会再次编译代码,尽管此后我没有更改任何代码。它与 cargo build 正常工作,然后是 cargo run,即使用前一个命令编译一次。

naufil@naufil-Inspiron-7559:~/Desktop/rust/20April/variables$ cargo build
   Compiling variables v0.1.0 (/home/naufil/Desktop/rust/20April/variables)
    Finished dev [unoptimized + debuginfo] target(s) in 0.35s
naufil@naufil-Inspiron-7559:~/Desktop/rust/20April/variables$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/variables`
Hello, world! 6
naufil@naufil-Inspiron-7559:~/Desktop/rust/20April/variables$ cargo build --release
   Compiling variables v0.1.0 (/home/naufil/Desktop/rust/20April/variables)
    Finished release [optimized] target(s) in 0.34s
naufil@naufil-Inspiron-7559:~/Desktop/rust/20April/variables$ cargo run
   Compiling variables v0.1.0 (/home/naufil/Desktop/rust/20April/variables)
    Finished dev [unoptimized + debuginfo] target(s) in 0.23s
     Running `target/debug/variables`
Hello, world! 6

最佳答案

cargo run 尝试运行项目的调试版本。请改用 cargo run --release cargo build --release 后跟 cargo run --release 将无法编译再次。

Cargo 维护着两组几乎完全独立的构建工件:

  • 调试版本,存储在target/debug/
  • 发布构建,存储在target/release/

所有这些子命令都允许您指定要使用的配置文件(不一定是详尽的列表):

  • 默认:调试(使用--release切换到 Release模式)
    • cargo 构建
    • cargo 运行
    • cargo 测试
    • cargo 检查
  • 默认:发布(使用--debug切换到 Debug模式)
    • 载货台
    • cargo 安装

关于compilation - 为什么 Rust 使用 `cargo build --release` 后跟 `cargo run` 再次编译我的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55770816/

相关文章:

linux - *.dsc 文件与 *.deb 和源代码文件的关系

c++ - 使用 OpenCV 库编译代码时出现链接错误

multithreading - 如何检查线程是否已在 Rust 中完成?

postgresql - 如何关闭 tokio-postgres 连接?

rust - 依赖于由 cargo 构建的另一个工作空间包的二进制文件

rust - 使用本地用户时,Windows 10 上的 Cargo 失败并显示 "spurious network error: The operation timed out"

c - 从Makefile内部调用另一个Makefile的规则

python - Python 编译器和虚拟机如何处理 eval 表达式?

rust - 为什么不能在同一结构中存储值和对该值的引用?

datetime - 如何将 chrono::Datetime 舍入到最接近的秒数?