基础篇-Cargo项目管理器

  • 木头
  • 更新于 2023-02-14 16:29
  • 阅读 2095

cargo new 创建项目。 cargo build 构建项目。 cargo run 一步构建并运行项目。 cargo check 在不生成二进制文件的情况下构建项目来检查错误。

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 下的可执行文件进行测试。

  • 原创
  • 学分: 5
  • 分类: Rust
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
121 订阅 31 篇文章

1 条评论

请先 登录 后评论
木头
木头
0xC020...10cf
江湖只有他的大名,没有他的介绍。