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

发布于:2024-05-08 ⋅ 阅读:(31) ⋅ 点赞:(0)

在这里插入图片描述


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 <MANIFEST_RS> [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 <FLAG>, 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 <command> for more information on a specific command.


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


伊织 2024-05-07(二)


网站公告

今日签到

点亮在社区的每一天
去签到