HelloRust - 3、使用Cargo

🧑‍🚀跟着《Rust权威指南》学习Rust💪,跟Rust打个招呼吧Hello Rust!🖐️😜
🧑‍✈️同步更新Github/skyline93

✔️一、安装Rust
✔️二、第一个Rust程序
👉三、使用Cargo
🔞四、基本概念

三、使用Cargo

cargo用来构建管理和编译rust项目的工具,在更大的rust项目中,cargo可以是添加和管理依赖变的非常简单。

在第一节使用rustup安装完工具链后,cargo就已经包含进来了,检查安装cargo版本

$ cargo --version
cargo 1.62.0 (a748cf5a3 2022-06-08)

3.1、使用cargo创建一个项目

例如创建一个名为hello_cargo的项目,如下命令:

$ cargo new hello_cargo
     Created binary (application) `hello_cargo` package

如下cargo将生成hello_cargo目录,并包含toml文件和源码文件

$ tree hello_cargo
hello_cargo
├── Cargo.toml
└── src
    └── main.rs

3.1.1、Cargo.toml文件

Cargo.toml文件初始化内容如下:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

其中,[package]标签下的内容用来配置当前的程序包信息,[dependencies]标签用来声明项目的依赖。

💌Tip: 在rust中,代码的集合称作包cratecrate是rust中最小的编译单元,package是单个或多个crate的集合。crate和package都可以叫做包,package倾向于多个crate的组合

3.1.2、src目录

所有的源代码文件都保存在了src目录下,而其他如README文档、配置文件等源代码无关的文件将放置在项目根目录下。使用cargo管理项目使得整个项目文件层次更加一致,方便管理维护。

3.2、构建和运行项目

3.2.1、编译项目代码

在项目根路径下,执行cargo build编译项目代码

$ cargo build
   Compiling hello_cargo v0.1.0 (/workspace/hellorust/code/3/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 1.00s

编译后将生成target目录,并得到可执行的二进制文件在target/debug/hello_cargo;首次编译还将在项目根路径下生成Cargo.lock文件,记录了当前项目所有依赖库的具体版本号。

$ tree .
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
        │   ├── hello_cargo-be7a131524fc0cd4
        │   └── hello_cargo-be7a131524fc0cd4.d
        ├── examples
        ├── hello_cargo
        ├── hello_cargo.d
        └── incremental
            └── hello_cargo-dz8kvwt8p3o6
                ├── s-gbi9sdzpyq-ll29eo-3v86w4vexbs3p
                │   ├── 14yscrht839uup6e.o
                │   ├── 3q6tjepta4m4v634.o
                │   ├── 4k0d0dgafn1ijep5.o
                │   ├── 4qoh67y9a9mehcok.o
                │   ├── dep-graph.bin
                │   ├── k2i8rahgk8h0l97.o
                │   ├── paus5f5lz2o9vv1.o
                │   ├── query-cache.bin
                │   ├── sezzbz89mszmu14.o
                │   ├── v7eulzwbrlgtsti.o
                │   └── work-products.bin
                └── s-gbi9sdzpyq-ll29eo.lock

3.2.2、运行程序

也可以使用cargo run命令运行程序;当cargo检查到当前代码有改动,cargo run将重新编译代码再运行

$ cargo run
   Compiling hello_cargo v0.1.0 (/workspace/hellorust/code/3/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 1.05s
     Running `target/debug/hello_cargo`
Hello, world!

3.2.3、编译检查

使用cargo check命令可以检查当前代码是否可以通过编译;
💌Tip: 这非常有用,它可以跳过生成二进制文件的过程,运行速度更快,当在真正编译二进制文件前,执行这个命令预先检查当前代码是否正确编译可以减少不必要的反复编译文件的时间

3.2.4、Release模式进行编译

使用如下命令参数编译生成最终发布的程序。这样编译出来的二进制文件有更好的运行时性能,但也需要更长的编译时间

$ cargo build --release
   Compiling hello_cargo v0.1.0 (/workspace/hellorust/code/3/hello_cargo)
    Finished release [optimized] target(s) in 0.39s

将在target目录下新生成一个release目录,并得到最终发布的二进制文件target/release/hello_cargo

$ tree .
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    ├── debug
    │   ├── ...
    └── release
        ├── build
        ├── deps
        │   ├── hello_cargo-05c603c3c4dd03c5
        │   └── hello_cargo-05c603c3c4dd03c5.d
        ├── examples
        ├── hello_cargo
        ├── hello_cargo.d
        └── incremental

posted @ 2022-07-10 12:48  GreeneGe  阅读(117)  评论(0编辑  收藏  举报

https://github.com/Glf9832