我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Rust中Cargo的使用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Rust中Cargo的使用详解

1、cargo简介

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

查看cargo版本

cargo --version

我这里可以看到具体的版本好和日期

cargo 1.63.0 (fd9c4297c 2022-07-01)

2、使用cargo创建项目

cargo new hello_cargo
cd hello_cargo

第一行命令,创建了一个名为hello_cargo的目录和项目。

进入目录可以看到以下目录:

|-class="lazy" data-src
| |-main.rs
|-.gitignore
|-Cargo.toml

2.1、关于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)接踵而至的3行设置了Cargo编译程序所需要的配置:name(项目名称)、version(项目的版本)、edition(使用的Rust版本)
  • 最后一行,[dependcies], 是罗列项目依赖的片段的开始,在Rust中,代码包被称为crates。当然在这个项目我们并不需要其他的crate,不过后面我们会用到这个片段。

2.2 、关于class="lazy" data-src/main.rs

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

​ Cargo为我们自动生成一个“Hello,world!” 程序,正如我们之前编写的示例helloWorld一样,不同的是它将main.rs文件放到了class="lazy" data-src目录下面。

​ Cargo 期望源文件存放在class="lazy" data-src目录中。项目根目录只存放 README、license信息、配置文件和其他跟代码无关的文件。使用Cargo帮助你保持项目干净整洁,一切井井有条。

​ 当然如果没有使用Cargo创建的项目,我们也可以转化为一个Cargo项目,比如我之前的HelloWorld项目。我们可以新建目录class="lazy" data-src、新建源文件main.rs在class="lazy" data-src目录下、以及创建一个合适的Cargo.toml 文件。

3、构建Cargo项目

我们现在已经使用Cargo创建好了hello_cargo项目,现在我们进入项目目录

cd hello_cargo

然后我们可以使用Cargo中的build命令开始构建项目

cargo build

执行命令后,会打印出如下结果:

Compiling hello_cargo v0.1.0 (D:\RustLang\RustWorkSpace\hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 1.09s

到这里我们首次运行cargo build成功,你会发现此时项目目录中多出了一个target目录和Cargo.lock文件。

这和前端打包类似,如执行npm run build 命令后npm会默认生成一个dist目录,里面就是源码代码经过编译和压缩后可以放在服务器运行的网页页面。其中生成的Cargo.lock文件也和package-lock.json类似,不用说Cargo.toml和package.json 对应。

最后我们可以运行构建成功后生成的可执行文件

.\target\debug\hello_cargo.exe

如果一切顺利,终端上应该打印出Hello,world!

由于默认的构建⽅法是调试构建(debug build),Cargo 会将可执⾏⽂件放在名为 debug 的⽬录中。

4、构建并运行Cargo项目

​ 在认识了cargo build命令,我们知道它是用来构建Cargo项目的,但是运行项目需要我们自己去target目录里面去找到可执行文件,并执行它。

​ 接下来我们来认识一个新的命令cargo run 。它可以构建并运行构建后的可执行文件。

cargo run 

打印结果:

 Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target\debug\hello_cargo.exe`
Hello, world!

​ 相信到了这里,我们心中一定明白这个命令,今后会是我们的长期合作伙伴,魂牵梦萦那种。

​ 当然有必要说明一下,因为之前我们已经使用cargo build 命令构建了hello_cargo项目 , 所以此时执行的 cargo run 命令并没有重新编译,而是直接运行了可执行文件,打印出了Hello,world!

​ 接下来我们看看,改变了源文件在执行该命令会是什么结果:

 Compiling hello_cargo v0.1.0 (D:\RustLang\RustWorkSpace\hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.63s
     Running `target\debug\hello_cargo.exe`
Hello, Rust world!

​ 这里我们看到结果里面有CompilingFinishedRunning 字样,所以我们知道这次它重新编译了该项目,并执行了可执行文件,打印出了新的结果:Hello, Rust world!

5、检查代码是否可编译

​ 接下来我们认识应该新的命令cargo check , 该命令可以快速检查代码确保可以编译,但并不产生可执行文件:

Checking hello_cargo v0.1.0 D:\RustLang\RustWorkSpace\hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.07s

如果一切顺利控制台会出现以上结果。

​ 到了这里可能有人会问,为什么不直接执行 cargo buildcargo run 命令呢?这样还可以直接生成可执行文件,多方便。

对于一个合格的新时代农民,我们应该持续定期去检查我们的“庄稼”,让它们可以健康成长,这样我们才可以迎来大丰收。不然我们可能会饿肚子!

​ 所以我们要习惯使用cargo check 定期检查我们的代码是否可编译,避免不必要的后顾之忧。

6、发布(release)构建

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

​ 对于运行发行版本我们可以使用 cargo run --release 命令

 Finished release [optimized] target(s) in 0.01s
     Running `target\release\hello_cargo.exe`
Hello, Rust world!

7、把Cargo当作习惯

​ 对于简单项目,Cargo并不比rustc提供了更多的优势,不过随着开发深入,最终会证明它的价值,⼀旦程序壮⼤到由多个⽂件组成,亦或者是需要其他的依赖,让 Cargo 协调构建过程就会简单得多。

​ 即便 hello_cargo 项⽬⼗分简单,它现在也使⽤了很多在你之后的 Rust ⽣涯将会⽤到的实⽤⼯具。其实,要在任何已存在的项⽬上⼯作时,可以使⽤如下命令通过 Git 检出代码,移动到该项⽬⽬录并构建:

git clone example.com/test_project
cd test_project
cargo build

了解更多关于Cargo可以查阅Cargo相关文档

8、总结

本章我们学习了Cargo的相关内容:

  • 使用 cargo new 创建项目
  • 使用 cargo build 构建项目
  • 使用 cargo run 一步构建并运行项目
  • 使用 cargo check 在不生成二进制文件的情况下检查项目是否可编译
  • 使用 cargo build --release 构建项目发行版本
  • 使用 cargo run --release 运行发行版本,可测试发布版本的运行时间

使⽤ Cargo 的⼀个额外的优点是,不管你使⽤什么操作系统,其命令都是⼀样的。所以从现在开始本书将不再为 Linux 和 macOS 以及 Windows 提供相应的命令。

到此这篇关于Rust中Cargo的使用的文章就介绍到这了,更多相关Rust Cargo的使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Rust中Cargo的使用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Rust中Cargo的使用详解

Cargo是Rust的构建系统和包管理器,⼤多数Rustacean们使⽤Cargo来管理他们的Rust项⽬,因为它可以为你处理很多任务,⽐如构建代码、下载依赖库并编译这些库,这篇文章主要介绍了Rust中Cargo的使用,需要的朋友可以参考下
2022-11-16

详解Rust中的方法

方法其实就是结构体的成员函数,在C语言中的结构体是没有成员函数的,但是Rust毕竟也是一门面向对象的编程语言,所以给结构体加上方法的特性很符合面向对象的特点,这篇文章主要介绍了Rust中的方法,需要的朋友可以参考下
2022-11-13

Rust语言中的String和HashMap使用示例详解

这篇文章主要介绍了Rust语言中的String和HashMap使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Rust中的函数指针详解

Rust是一种现代的系统编程语言,它支持函数指针。函数指针是指向函数的指针,可以将函数作为参数传递给其他函数或存储在变量中。Rust中的函数指针可以用于实现回调函数、动态分发和多态等功能。本文将介绍Rust中的函数指针的基本用法和高级用法。
2023-05-18

深入了解Rust中泛型的使用

所有的编程语言都致力于将重复的任务简单化,并为此提供各种各样的工具。在 Rust 中,泛型(generics)就是这样一种工具,本文就来聊聊Rust中泛型的使用,需要的可以参考一下
2022-11-13

详解Rust中的所有权机制

Rust 语言提供了跟其他系统编程语言相同的方式来控制你使用的内存,但拥有数据所有者在离开作用域后自动清除其数据的功能意味着你无须额外编写和调试相关的控制代码,这篇文章主要介绍了Rust中的所有权机制,需要的朋友可以参考下
2022-11-13

Rust中的derive属性示例详解

derive属性的出现解决了手动实现一些特性时需要编写大量重复代码的问题,它可以让编译器自动生成这些特性的基本实现,从而减少了程序员需要编写的代码量,这篇文章主要介绍了Rust中的derive属性详解,需要的朋友可以参考下
2023-05-16

Rust中的不安全代码详解

这篇文章主要为大家介绍了Rust中的不安全代码详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-18

Rust之Substrate框架中的pallet详解

Pallet是Substrate区块链的基础模块,它定义了区块链的业务逻辑和状态转换规则。开发人员可以使用现有的Pallet来快速构建区块链,也可以开发自定义的Pallet来实现特定的功能,感兴趣的小伙伴可以参考阅读下
2023-05-18

详解Rust中的变量与常量

大多数尝试过Rust的人都希望继续使用它。但是如果你没有使用过它,你可能会想——什么是Rust,如何理解Rust中的变量与常量,感兴趣的朋友跟随小编一起看看吧
2022-11-13

rust的vector和hashmap详解

这篇文章主要介绍了rust的vector和hashmap,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-19

Rust之Substrate框架中Core详解

Substrate是一个用于构建区块链的开发框架,它由Parity团队基于Rust语言开发而成,是一个开箱即用的区块链构造器,本文详细介绍了Substrate框架中的Core,需要的朋友可以参考下
2023-05-18

深入了解Rust中函数与闭包的使用

本文主要介绍一下Rust函数相关的内容,首先函数我们其实一直都在用,所以函数本身没什么可说的,我们的重点是与函数相关的闭包、高阶函数、发散函数,感兴趣的可以学习一下
2022-11-13

深入了解Rust的切片使用

除了引用,Rust 还有另外一种不持有所有权的数据类型:切片(slice),切片允许我们引用集合中某一段连续的元素序列,而不是整个集合。本文让我们来深入了解Rust的切片
2022-11-13

Rust中的derive属性怎么使用

本文小编为大家详细介绍“Rust中的derive属性怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Rust中的derive属性怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. Rust中的de
2023-07-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录