为什么Rust会先用`cargo build --release`再加上`cargo run`再次编译我的项目?

时间:2019-04-20 06:13:54

标签: 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

1 个答案:

答案 0 :(得分:3)

cargo run尝试运行项目的调试版本。改为使用cargo run --release后跟cargo build --release的{​​{1}}将不会再次编译。

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

  • 调试版本,存储在cargo run --release
  • 发布版本,存储在target/debug/

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

  • 默认:调试(使用target/release/切换到发布模式)
    • --release
    • cargo build
    • cargo run
    • cargo test
  • 默认:发布(使用cargo check切换到调试模式)
    • --debug
    • cargo bench