Rust之cargo简单熟悉
Rust之cargo简单熟悉
还记得上一篇文章 –《Rust简单开发环境搭建》中,helloworld
的例子是用cargo
来管理的,今天我们就来聊聊这个cargo
cargo
是什么?为什么需要这个cargo
?
cargo
是Rust的包管理器,Rust的包分为2种,一种是二进制可执行的包,一种是库的包,默认情况下就是第一种binary包
在Rust里,一个库或者可执行程序叫做一个crate
,一般简单情况下,我们可以直接使用Rust的编译器rustc
来编译这个crate
,但如果编译这个crate
需要许多编译参数,包含许多依赖,或者需要其他构建工具,手动去操作就会很麻烦,而且也很难管理,这样包管理器cargo
就应运而生了
cargo
主要做以下4个工作:
- 引入两个包含包信息的元数据文件
- 获取并构建包的依赖项
- 用正确的参数调用
rustc
或其他构建工具来生成包 - 引入规则约定,使使用Rust包变得更容易
包结构
下面是用cargo
生成的包目录结构:
.
├── Cargo.lock
├── Cargo.toml
├── src/
│ ├── lib.rs
│ ├── main.rs
│ └── bin/
│ ├── named-executable.rs
│ ├── another-executable.rs
│ └── multi-file-executable/
│ ├── main.rs
│ └── some_module.rs
├── benches/
│ ├── large-input.rs
│ └── multi-file-bench/
│ ├── main.rs
│ └── bench_module.rs
├── examples/
│ ├── simple.rs
│ └── multi-file-example/
│ ├── main.rs
│ └── ex_module.rs
└── tests/
├── some-integration-tests.rs
└── multi-file-test/
├── main.rs
└── test_module.rs
为了更好的方便管理,cargo
对结构目录会有一些规则约束:
Cargo.toml
和Cargo.lock
放在包的根目录下面.- 源代码放在
src
目录. - 默认的库文件是
src/lib.rs
. - 默认的可执行文件是
src/main.rs
.- 其他可执行的放在
src/bin/
.
- 其他可执行的放在
- Benchmarks放在
benches
目录. - 例子放在
examples
目录. - 集成测试放在
tests
目录.
如果这些包含多个源码,额外模块,需在这些目录下面的子目录放上一个main.rs
.
Cargo.toml
和 Cargo.lock
说明:
Cargo.toml
文件主要是描述所有的依赖项,需要我们自己根据需求来修改Cargo.lock
文件包含有关依赖项的确切信息. 该文件是由 Cargo 来维护,不能手动去修改.
Cargo.toml
这里说说这个我们平时需要修改的Cargo.toml
:
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# 简单例子
依赖的包名 = "版本"
这个被叫做一个manifest
, 它包含了Cargo编译这个包所需的所有元数据,manifest
相关的格式及元素组成说明可详见 https://doc.rust-lang.org/cargo/reference/manifest.html
这里目前用的最多就是依赖项[dependencies],
填写好依赖项后,使用cargo build
构建时, Cargo
会下载所有的依赖包并编译它们, 然后更新 Cargo.lock
文件
使用cargo
cargo
的简单用法在环境搭建时已经走过一遍了,这里不再赘述,后面遇到问题再一一研究
一些常见的命令如下,具体用法可通过help
查看
$ cargo --help
Rust's package manager
Usage: cargo [+toolchain] [OPTIONS] [COMMAND]
Options:
-V, --version Print version info and exit
--list List installed commands
--explain <CODE> Run `rustc --explain CODE`
-v, --verbose... Use verbose output (-vv very verbose/build.rs output)
-q, --quiet Do not print cargo log messages
--color <WHEN> Coloring: auto, always, never
-C <DIRECTORY> Change to DIRECTORY before doing anything (nightly-only)
--frozen Require Cargo.lock and cache are up to date
--locked Require Cargo.lock is up to date
--offline Run without accessing the network
--config <KEY=VALUE> Override a configuration value
-Z <FLAG> Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for details
-h, --help Print help
Some common cargo commands are (see all commands with --list):
build, b Compile the current package
check, c Analyze the current package and report errors, but don't build object files
clean Remove the target directory
doc, d Build this package's and its dependencies' documentation
new Create a new cargo package
init Create a new cargo package in an existing directory
add Add dependencies to a manifest file
remove Remove dependencies from a manifest file
run, r Run a binary or example of the local package
test, t Run the tests
bench Run the benchmarks
update Update dependencies listed in Cargo.lock
search Search registry for crates
publish Package and upload this package to the registry
install Install a Rust binary. Default location is $HOME/.cargo/bin
uninstall Uninstall a Rust binary
See 'cargo help <command>' for more information on a specific command.
参考
cargo
简单介绍就到此结束了,更多详细细节可查看其官方文档:
cargo官方文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论