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

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

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

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

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

Cargo是Rust的包管理器,用于构建Rust项目和管理依赖包。本文将详细介绍Cargo的基本概念、项目构建流程、依赖管理以及常用命令等。

关于 Cargo

Cargo 是 Rust 的包管理器。Cargo 下载 Rust 包的依赖项,编译包,创建可分发的包,并将它们上传到 crates.io,这是 Rust 社区的包注册表。

构建项目

创建工程

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号