区块链 区块链技术 比特币公众号手机端

基础篇-Cargo项目管理器

liumuhui 2年前 (2023-06-28) 阅读数 199 #技术

Cargo简介

CargoRust 的构建系统和包管理器。大多数 Rustacean 们使用 Cargo 来管理他们的 Rust 项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。(我们把代码所需要的库叫做 依赖(dependencies))。

最简单的 Rust 程序,比如我们刚刚编写的,没有任何依赖。如果使用 Cargo 来构建 “Hello, world!” 项目,将只会用到Cargo 构建代码的那部分功能。在编写更复杂的 Rust 程序时,你将添加依赖项,如果使用 Cargo 启动项目,则添加依赖项将更容易。

由于绝大多数 Rust项目使用 Cargo,如果使用官方安装包的话,则自带了 Cargo。如果通过其他方式安装的话,可以在终端输入如下命令检查是否安装了 Cargo

$ cargo --version
cargo 1.67.1 (8ecd4f20a 2023-01-10)

如果你看到了版本号,说明已安装!如果看到类似 command not found 的错误,你应该查看相应安装文档以确定如何单独安装 Cargo

使用 Cargo 创建项目

假设各位已经安装好了Cargo,我们使用Cargo创建一个新项目,然后看看与上面的 “Hello, world!”项目有什么不同。回到projects目录(或者你存放代码的目录)。接着,可在任何操作系统下运行以下命令:

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

第一行命令新建了名为 hello_cargo 的目录和项目。我们将项目命名为hello_cargo,同时Cargo在一个同名目录中创建项目文件。

.
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files

进入hello_cargo目录并列出文件。将会看到Cargo生成了两个文件和一个目录:一个 Cargo.toml文件,一个 src 目录,以及位于 src目录中的main.rs文件。

编辑器打开 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],是一个片段(section)标题,表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,还将增加其他片段(section)。

接下来的三行设置了 Cargo编译程序所需的配置:项目的名称、项目的版本以及要使用的 Rust 版本。

最后一行,[dependencies],是罗列项目依赖的片段的开始。在Rust中,代码包被称为crates。这个项目并不需要其他的 crate

编辑器打开 src/main.rs 文件

fn main() {
    println!("Hello, world!");
}

Cargo 为你生成了一个 “Hello, world!”程序,目前为止,我们的项目与Cargo生成项目的区别是 Cargo 将代码放在 src 目录,同时项目根目录包含一个 Cargo.toml 配置文件。 Cargo期望源文件存放在src 目录中。项目根目录只存放 READMElicense 信息、配置文件和其他跟代码无关的文件。

构建并运行 Cargo 项目

cargo build 构建项目

现在让我们看看通过 Cargo 构建和运行“Hello, world!” 程序有什么不同!在 hello_cargo 目录下,输入下面的命令来构建项目:

$ cargo build
   Compiling hello_cargo v0.1.0 (/projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 1.46s

这个命令会创建一个可执行文件 target/debug/hello_cargo (在 Windows 上是 target\debug\hello_cargo.exe),而不是放在目前目录下。由于默认的构建方法是调试构建(debug build),Cargo 会将可执行文件放在名为 debug 的目录中。可以通过这个命令运行可执行文件:

$ ./target/debug/hello_cargo # 或者在 Windows 下为 .\target\debug\hello_cargo.exe
Hello, world!

如果一切顺利,终端上应该会打印出 Hello, world!。首次运行 cargo build时,也会使 Cargo 在项目根目录创建一个新文件:Cargo.lock。这个文件记录项目依赖的实际版本。这个项目并没有依赖,所以其内容比较少。你自己永远也不需要碰这个文件,让 Cargo 处理它就行了。

cargo run 构建并运行项目

我们刚刚使用cargo build 构建了项目,并使用./target/debug/hello_cargo 运行了程序,也可以使用 cargo run 在一个命令中同时编译并运行生成的可执行文件:

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/hello_cargo`
Hello, world!

比起要记得运行 cargo build 之后再用可执行文件的完整路径来运行程序,使用 cargo run可以实现完全相同的效果,而且要方便得多,所以大多数开发者会使用cargo run

注意这一次并没有出现表明Cargo正在编译hello_cargo 的输出。Cargo 发现文件并没有被改变,所以它并没有重新编译,而是直接运行了可执行文件。如果修改了源文件的话,Cargo 会在运行之前重新构建项目,并会出现像这样的输出:

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

cargo check 检查代码

Cargo还提供了一个叫cargo check的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件:

$ cargo check
    Checking hello_cargo v0.1.0 (/projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.83s

为什么你会不需要可执行文件呢?通常 cargo check 要比 cargo build 快得多,因为它省略了生成可执行文件的步骤。

发布(release)构建

当项目最终准备好发布时,可以使用 cargo build --release 来优化编译项目。这会在 target/release 而不是 target/debug下生成可执行文件。这些优化可以让Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为了开发,你需要经常快速重新构建;另一种是为用户构建最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。如果你在测试代码的运行时间,请确保运行 cargo build --release 并使用 target/release 下的可执行文件进行测试。

版权声明

本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门