Cargo
本文大部分内容翻译自:The Rust Programming Language
1. Cargo简介
Cargo是Rust的构建系统和软件包管理器,可以为Rust程序完成很多工作,如:
- 构建代码
- 下载代码依赖的库
- 构建这些库
当你写的Rust程序变得越来越复杂,就会需要依赖包,使用Cargo就会让添加依赖变得更容易。
在安装Rust时,Cargo已经被安装好了,可以通过下面命令来查看Cargo的版本号:
1 | cargo --version |
2. 使用Cargo创建工程 - cargo new
1 | cargo new hello_cargo |
运行结果如下:
上面的命令新建了一个名为hello_cargo
的路径,工程被命名为hello_cargo
,cargo会在这个路径下创建文件。
从上图可以看到,cargo为我们创建了:
- 两个文件:
Cargo.toml
,src/main.rs
- 一个路径:
src
并且新建了一个有.gitignore
文件的Git仓库。如果你在一个已存在的Git仓库下执行cargo new
,这些Git文件是不会被创建的。可以使用:
1 | cargo new --vcs=git |
来覆盖原本的Git仓库文件。
3. Cargo.toml
使用cargo new
创建的Cargo.toml
如下所示:
1 | [package] |
这个文件是TOML(Tom’s Obvious, Minimal Language)格式的,是Cargo配置文件的格式。
第一行[package]
是一个section的标题,表示下面定义的内容是在配置一个package。随着内容的增加,我们以后会添加其它的sections。
下面的3行定义了Cargo在编译程序时需要的配置信息:名称(name
),版本号(version
),要使用的Rust的版本(edition
)。
在Rust中,包(packages)被称为“crates”。最后一行[dependencies]
,就是用来列举工程中使用的依赖(“crates”)的section。在[dependencies]
这个section中,你告诉Cargo你的项目需要使用/依赖于什么外部crates,这些crates的版本号是什么。
在Cargo.toml
中,header下面的所有内容都属于header代表的section,直到另一个section出现。
4. 构建和运行Cargo工程
在src
路径下,Cargo为我们生成了一个Hello world程序:main.rs
,与我们自己创建的main.rs
不同的是,Cargo将它放在src
文件夹下,并且在工程路径的最上层创建了Cargo.toml
。
Cargo默认你的源文件都被放在src
路径下,工程路径的最上层会放置:
- README文件
- license
- 配置文件(Cargo.toml等)
- 其它任何与代码不相关的文件
4.1. 构建Cargo工程 - cargo build
4.1.1. cargo bulid
1 | cargo build |
这个命令会在路径target/debug/
下创建一个可执行文件hello_cargo
(如果是Windows系统,创建的是hello_cargo.exe
)。
运行可执行文件:
1 | ./target/debug/hello_cargo # Windows上执行:.\target\debug\hello_cargo.exe |
执行后会看到Terminal上打印出”Hello, world!”,如下图所示:
第一次运行cargo build
时会生成Cargo.lock
文件,这个文件会跟踪项目中依赖的确切版本。你不需要手动修改这个文件,Cargo会为你管理这个文件的内容。
4.1.2. cargo build –release
如果你的项目准备好发行了,可以使用
1 | cargo build --release |
来编译它,并会对它进行优化。这个命令会在target/release
下生成可执行文件(而不是target/debug
)。
优化会使你的项目运行得更快,但编译的时间会延长。
4.2. 运行Cargo工程 - cargo run
可以使用cargo run
来编译并运行项目:
1 | cargo run |
可以看到这次没有出现Compiling hello_cargo
的提示,这是因为Cargo发现文件没有改变,所以直接运行了生成的二进制文件。如果你修改了源代码,Cargo就会重新构建项目,然后才运行它:
4.3. 检查是否可编译 - cargo check
cargo check
会快速地检查你的代码是否可编译,但不会生成可执行文件:
1 | cargo check |
由于不会生成可执行文件,cargo check
要比cargo build
快很多。
5. 命令总结
- cargo new:创建新项目
- cargo build:构建项目并生成可执行文件
- 可执行文件位置:
target/debug/
- 可执行文件位置:
- cargo run:构建并运行项目
- cargo check:只构建项目
参考资料
[1] The Rust Programming Language:https://doc.rust-lang.org/stable/book/ch01-03-hello-cargo.html