Почему Rust снова компилирует мой проект с `cargo build —release`, за которым следует `cargo run`?

#compilation #rust #rust-cargo

#Сборник #Ржавчина #rust-cargo

Вопрос:

Документация Rust учит нас, что 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. Если вы запустите cargo build --release и затем cargo run --release , он тоже перекомпилируется?

2. @Cerberus нет, это не так. Спасибо. Документация этому не учит

3. Если вы немного посмотрите на время выполнения, вы увидите, что он просто проверяет, есть ли новые изменения, но он немедленно завершается, потому что в нем нет изменений. Затем он просто запускается.

Ответ №1:

cargo run попытка запустить отладочную сборку вашего проекта. Используйте cargo run --release вместо этого.A cargo build --release , за которым следует cargo run --release , снова не компилируется.

Cargo поддерживает два практически полностью независимых набора артефактов сборки:

  • Отладочная сборка, хранящаяся в target/debug/
  • Сборка релиза, хранящаяся в target/release/

Все эти подкоманды позволяют указать, какой из этих профилей использовать (не обязательно исчерпывающий список):

  • По умолчанию: debug (переключитесь в режим выпуска с --release помощью)
    • cargo build
    • cargo run
    • cargo test
    • cargo check
  • По умолчанию: release (переключитесь в режим отладки с --debug помощью)
    • cargo bench
    • cargo install