创建一个新软件包
要使用 Cargo 生成新 package,请用 cargo new :
$ cargo new hello_world --bin
传递 --bin,是因为我们正在生成一个二进制程序;而如果我们正在创建一个库(lib),则需要传递 --lib。默认情况下,这个目录会初始化为一个新的 git 存储库,如果你不希望它这样做,请传递 --vcs none。
让我们来看看 Cargo 为我们生成了什么:
$ cd hello_world
$ tree .
.
├── Cargo.toml
└── src
└── main.rs
1 directory, 2 files
我们再仔细看看 Cargo.toml:
[package]
name = "hello_world"
version = "0.1.0"
edition = "2024"
[dependencies]
这被称为manifest,它包含了 Cargo 编译项目所需的所有元数据。这份文件以 TOML (读作 /tɑməl/)的格式记录下来。
那 src/main.rs 中有什么:
fn main() { println!("Hello, world!"); }
Cargo 为我们生成了一份 "hello world" 程序,也就是一份 binary crate。现在来编译它:
$ cargo build
Compiling hello_world v0.1.0 (file:///path/to/project/hello_world)
然后运行它:
$ ./target/debug/hello_world
Hello, world!
我们也可以直接使用 cargo run 来编译并运行它,这只需要一步 (若并没有修改源文件,Compiling 这行就不会出现):
$ cargo run
Compiling hello_world v0.1.0 (file:///path/to/package/hello_world)
Running `target/debug/hello_world`
Hello, world!
你可能会发现 Cargo.lock 文件,它此前从未出现过。尽管讨论一份 .lock 文件索然无味,但它保管了你的项目的依赖信息,尽管你从未为项目引入任何依赖。
一旦你准备好构建 release,使用 cargo build --release 命令通过优化编译你的项目:
$ cargo build --release
Compiling hello_world v0.1.0 (file:///path/to/package/hello_world)
cargo build --release 会让你的二进制文件生成于 target/release 目录下,而非 target/debug。
在 debug 模式下编译是开发过程中的默认选项。此时编译器并不会做太多优化,所以编译时间较短,代价就是这样得到的二进制文件性能很差,跑得很慢。相对的,release 模式就会用掉更多时间编译,在此期间编译器会尽力优化,保证项目的运行速度。