问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Cargo - 构建 rust项目、管理依赖包

创作时间:
作者:
@小白创作中心

Cargo - 构建 rust项目、管理依赖包

引用
CSDN
1.
https://blog.csdn.net/lovechris00/article/details/138540002

文章目录

  • 关于 Cargo
  • 构建项目
  • 创建工程
  • 编译运行
  • build
  • clean
  • 管理依赖
  • 添加依赖
  • update
  • check
  • 计时
  • manual

rust 安装可参考:https://blog.csdn.net/lovechris00/article/details/124808034

关于 Cargo

Cargo is the Rust package manager.

Cargo downloads your Rust package’s dependencies, compiles your packages, makes distributable packages, and uploads them to crates.io, the Rust community’s package registry.

构建项目

创建工程

cargo new world_hello

目录结构如下

$ tree
.
├── Cargo.toml
└── src
    └── main.rs
1 directory, 2 files
  • Cargo.toml
    为 Rust 的清单文件。其中包含了项目的元数据和依赖库。
  • src/main.rs
    为编写应用代码的地方。

编译运行

cargo run
Compiling world_hello v0.1.0 (/Users/user/Documents/code/scode1/rust/world_hello)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.95s
Running `target/debug/world_hello`
Hello, world!

会产生编译文件

$ tree -L 3
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
        ├── examples
        ├── incremental
        ├── world_hello
        └── world_hello.d

运行 build/run 命令会创建一个新文件
Cargo.lock
,该文件记录了本地所用依赖库的精确版本。

build

使用 run 就会自动build,但有时候我们可以只使用 build

cargo build
  • 会生成 debug 文件夹:
    world_hello/target/debug
  • 将 debug 文件夹删掉,再次 build 会产生新的 debug 文件夹;
  • 如果原文件没修改,build 后,debug 的内容可能不会更新。

clean

cargo clean

debug 等文件夹会被删掉

$ cargo clean
Removed 119 files, 11.4MiB total
$ tree
.
├── Cargo.lock
├── Cargo.toml
└── src
    └── main.rs
1 directory, 3 files

管理依赖

创建项目会自动生成
Cargo.toml
文件
原始内容如下:

[package]
name = "world_hello"
version = "0.1.0"
edition = "2021"
[dependencies]

添加依赖

在 Rust 中,我们通常把包称作
crates
你可以在 crates 库搜索依赖:https://crates.io/crates/rand
这里以添加 rand 为例,添加在
[dependencies]
下方

...
[dependencies]
rand = "0.3.14"

再次 build

$ cargo build
Updating crates.io index
Downloaded rand v0.3.23
Downloaded rand v0.4.6
Downloaded libc v0.2.154
Downloaded 3 crates (831.0 KB) in 1.22s
Compiling libc v0.2.154
Compiling rand v0.4.6
Compiling rand v0.3.23
Compiling world_hello v0.1.0 (/Users/user/Documents/code/scode1/rust/world_hello)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.11s

查看文件结构
多出了 rand 相关内容

$ tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        │   ├── libc-f94129358965b880
        │   │   ├── invoked.timestamp
        │   │   ├── out
        │   │   ├── output
        │   │   ├── root-output
        │   │   └── stderr
        │   └── libc-fc8c71922db79826
        │       ├── build-script-build
        │       ├── build_script_build-fc8c71922db79826
        │       └── build_script_build-fc8c71922db79826.d
        ├── deps
        │   ├── libc-2cd8d736a65e3bdc.d
        │   ├── libc-2cd8d736a65e3bdc.libc.844209738d3bf612-cgu.0.rcgu.o
        │   ├── liblibc-2cd8d736a65e3bdc.rlib
        │   ├── liblibc-2cd8d736a65e3bdc.rmeta
        │   ├── librand-51e82a279537c372.rlib
        │   ├── librand-51e82a279537c372.rmeta
        │   ├── librand-76148f2644fb6b76.rlib
        │   ├── librand-76148f2644fb6b76.rmeta
        │   ├── rand-51e82a279537c372.d
        │   ├── ...
        │   ├── rand-76148f2644fb6b76.rand.46a886c6f1f6cb04-cgu.4.rcgu.o
        │   ├── world_hello-7dfffed2f60728f0
        │   ├── ...
        │   └── world_hello-ffc760ff065d95f4.rvrclgiszz772pw.rcgu.o
        ├── examples
        ├── incremental
        │   ├── world_hello-2gr5fivx8ev9t
        │   │   ├── s-gvxy0ymbb9-azi538-5zea3fzl7hz9mcsbpmuo9lnu2
        │   │   │   ├── 2ao7q67wh7pwb6v2.o
        │   │   │   ├── ...
        │   │   │   └── work-products.bin
        │   │   └── s-gvxy0ymbb9-azi538.lock
        │   └── world_hello-32qpckyi3s6et
        │       ├── s-gvxxyb5ewl-1g1nr9k-5ewriqusvpjsrgth3731ddhf3
        │       │   ├── 2jcl4b6uedw0auwo.o
        │       │   ├── ...
        │       │   ├── rvrclgiszz772pw.o
        │       │   └── work-products.bin
        │       └── s-gvxxyb5ewl-1g1nr9k.lock
        ├── world_hello
        └── world_hello.d
14 directories, 65 files

update

更新所有依赖

cargo update

更新指定库

cargo update -p rand

check

查看对目录进行了哪些更改
修改内容 按 倒序排序
运行 check 之前,
cargo clean
清理目录

$ cargo check
Checking libc v0.2.154
Checking rand v0.4.6
Checking rand v0.3.23
Checking world_hello v0.1.0 (/Users/user/Documents/code/scode1/rust/world_hello)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.94s

计时

查看编译时间

time cargo build

manual

cargo help

Rust’s package manager
Usage: cargo [+toolchain] [OPTIONS] [COMMAND]
cargo [+toolchain] [OPTIONS] -Zscript [ARGS]…
Options:
-V,
--version,
Print version info and exit
-list,
List installed commands
-explain <CODE,
Provide a detailed explanation of a rustc error message
-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 ,
Unstable (nightly-only) flags to Cargo, see
cargo -Z help
for details
-h,
--help,
Print help
Commands:
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
uninstall Uninstall a Rust binary
… : See all commands with --list
See
cargo help
for more information on a specific command.

写完以上后,发现这个官方教程就挺好,参考:
https://www.rust-lang.org/zh-CN/learn

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号