#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