Почему Rust снова компилирует мой проект с помощью «cargo build --release», за которым следует «cargo run»? - PullRequest
5 голосов
/ 20 апреля 2019

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 Ответ

4 голосов
/ 20 апреля 2019

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

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

  • Сборка отладки, хранящаяся в target/debug/
  • Сборка выпуска, хранящаяся в target/release/

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

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