当前位置: 首页 > news >正文

rust cargo

一、cargo是什么

Cargo是Rust的构建工具和包管理器。
Cargo除了创建工程、构建工程、运行工程等功能,还具有下载依赖库、编译依赖等功能。
真正编写程序时,我们不直接用rustc,而是用cargo。

二、使用cargo

(一)使用Cargo创建项目
回到projects目录。运行以下命令:

$ cargo new hello_cargo
$ cd hello_cargo

cargo new命令新建了名为hello_cargo的目录。
目录结构如下

$ tree .
├── .git
├── .gitignore
├──Cargo.toml
└──src└──main.rs

源文件存放在src目录中。
项目根目录只存放README、license信息、配置文件和其他跟代码无关的文件。

现在打开src/main.rs看看:

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

(二)构建并运行Cargo项目
1.使用cargo build
在hello_cargo目录下,输入下面的命令来构建项目:

$ cargo build

这个命令会创建一个可执行文件target/debug/hello_cargo。由于默认的构建方法是调试构建(debug build),Cargo会将可执行文件放在名为debug的目录中。

运行可执行文件:

$ ./target/debug/hello_cargo

2.使用cargo run
可以使用cargo run在一个命令中同时编译并运行生成的可执行文件:

$ cargo run

使用cargo run方便得多,所以大多数开发者会使用cargo run。

3.使用cargo check
该命令快速检查代码确保其可以编译,但并不产生可执行文件:

$ cargo check

为什么不需要可执行文件呢?因为只是检查错误,不必生成可执行文件,用cargo check要比cargo build快得多。

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

(四)Cargo.toml文件
像下面这样:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
[dependencies]
regex = "0.1.41"

这个文件使用TOML (Tom’s Obvious, Minimal Language) 格式,这是Cargo配置文件的格式。
[package],是包片段,表明下面的语句用来配置包。
接下来的三行是包的名称、包的版本、使用的Rust版本。
[dependencies],是依赖片段。表明下面语句都是需要的依赖。

在Cargo.toml文件中添加依赖之后,Cargo会获取依赖以及依赖的依赖,编译并生成 Cargo.lock,Cargo.lock中包含了所有依赖的版本信息。未来就算regexp的作者升级了该包,我们依然会下载Cargo.lock中的版本,而不是最新的版本,只有这样,才能保证项目依赖包不会因为更新导致无法编译。当然,你还可以使用cargo update来手动更新包的版本

有三种添加依赖的方法:
1.添加官方仓库的依赖
指定版本号
例子

rand = "0.3"
hammer = { version = "0.5.0"}

版本号符合 “x.y.z” 的形式,其中x称为主版本major, y称为小版本minor,而z称为补丁patch,从左到右,版本的影响范围逐步降低

^ 指定版本
与 “x.y.z” 不同, ^ 可以指定一个版本号范围,然后会使用该范围内的最大版本号。

^1.2.3 := >=1.2.3, <2.0.0
^1.2 := >=1.2.0, <2.0.0
^1 := >=1.0.0, <2.0.0

~ 指定版本
~ 使用该范围内的最小版本号 :

~1.2.3 := >=1.2.3, <1.3.0
~1.2 := >=1.2.0, <1.3.0
~1 := >=1.0.0, <2.0.0

* 通配符
这种方式允许将 * 所在的位置替换成任何数字:

* := >=0.0.0
1.* := >=1.0.0, <2.0.0
1.2.* := >=1.2.0, <1.3.0

不过crates.io并不允许我们只使用孤零零一个 * 来指定版本号 : *。

比较符
可以使用比较符指定一个版本号范围:

>= 1.2.0
> 1
< 2
= 1.2.3

同时还能组合比较符,并通过逗号分隔:

>= 1.2, < 1.5

2.添加第三方仓库的依赖
指定git仓库地址
例子

color = { git = "https://github.com/bjz/color-rs" }

由于没有指定版本,Cargo会假定我们使用main分支的最新commit。
你可以使用rev、tag或branch来指定想要拉取的版本。例如下面代码拉取了next分支上的最新commit:

[dependencies]
regex = { git = "https://github.com/rust-lang/regex", branch = "next" }

任何非tag和branch的类型都可以通过rev来引入,例如通过最近一次commit的哈希值引入: rev = “4c59b707”,再比如远程仓库提供的的具名引用: rev = "refs/pull/493/head"

3.添加本地的依赖
指定绝对路径或者相对路径
例子

geometry = { path = "crates/geometry" }

一般来说,本地依赖包都是同一个项目内的内部包,例如假设我们有一个 hello_world 项目,现在在其根目录下新建一个包:

# 在hello_world/ 目录下
$ cargo new hello_utils

新建的 hello_utils 文件夹跟 src、Cargo.toml同级,现在修改Cargo.toml让hello_world项目引入新建的包:

[dependencies]
hello_utils = { path = "hello_utils" }
# 以下路径也可以
# hello_utils = { path = "./hello_utils" }
# hello_utils = { path = "../hello_world/hello_utils" }

三、配置cargo

官方仓库的地址默认是crates.io,是由Rust官方提供的,国内访问不了。
可以修改为国内的镜像地址。

cargo配置文件为
在Windows系统默认为:%USERPROFILE%\.cargo\config
在linux系统默认为:$HOME/.cargo/config

在配置文件里添加如下代码

[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

注意,cargo search无法使用镜像。

相关文章:

rust cargo

一、cargo是什么 Cargo是Rust的构建工具和包管理器。 Cargo除了创建工程、构建工程、运行工程等功能&#xff0c;还具有下载依赖库、编译依赖等功能。 真正编写程序时&#xff0c;我们不直接用rustc&#xff0c;而是用cargo。 二、使用cargo &#xff08;一&#xff09;使用…...

CANoe.Diva生成测试用例

Diva目录 一、CANoe.Diva打开CDD文件二、导入CDD文件三、ECU Information四、时间参数设置五、选择是否测试功能寻址六、勾选需要测试服务项七、生成测试用例 一、CANoe.Diva打开CDD文件 CANoe.Diva可以通过导入cdd或odx文件&#xff0c;自动生成全面的测试用例。再在CANoe中导…...

openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译

文章目录 openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译89.1 查询编译&#xff1a;PREPARE语句89.2 运行命令89.3 轻量执行支持的查询89.4 轻量执行不支持的查询89.5 JIT存储过程89.6 MOT JIT诊断89.6.1 mot_jit_detai…...

python获取时间戳

使用 datetime 库获取时间。 获取当前时间&#xff1a; import datetime print(datetime.datetime.now()) . 后面的是微秒&#xff0c;也是一个时间单位&#xff0c;1秒1000000微秒。 转为时间戳&#xff1a; import datetimedate datetime.datetime.now() timestamp date…...

2023年山东省安全员C证证考试题库及山东省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…...

Java中的Unicode字符编码与占用比特位解析

本文将详细介绍Java中Unicode字符编码与占用比特位的相关知识。我们将首先介绍Unicode字符集的基本概念&#xff0c;然后深入探讨Java中Unicode字符的编码方式以及占用比特位的特点。最后&#xff0c;我们将讨论一些特殊字符的编码情况&#xff0c;并给出一些在Java中处理Unico…...

分布式事务-TCC案例分析流程图

防止cancel方法在最后执行出现问题&#xff0c;用户收到提示已经退款成功但是由于cancel过慢或者出现问题&#xff08;虽然最后会重试成功但是用户体验很差&#xff09;&#xff0c;可以做以下的业务sql模型优化(增加一个冻结金额)。...

究竟是什么样的讲解数组算法的博客让我写了三小时???

版本说明 当前版本号[20231004]。 版本修改说明20231004初版 目录 文章目录 版本说明目录二. 基础数据结构2.1 数组1) 概述2) 动态数组1&#xff09;插入addlast 方法测试: addlast 方法 add 方法测试&#xff1a;add方法 addlast 方法与 add 方法合并版get 方法测试&#x…...

Day-05 CentOS7.5 安装docker

参考 &#xff1a; Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/install/centos/ Doc…...

Makefile

目录 Makefile Makefile格式 Makefile函数&#xff1a;foreach和wildcard $(foreach var,list,text) $(wildcard pattern) 完善Makefile Makefile 在Linux中使用make工具来编译程序&#xff08;特别是大程序&#xff09;&#xff0c;而make工具所执行的动作依赖于Makefil…...

c语言练习77:公因⼦的数⽬

公因⼦的数⽬ 题⽬描述&#xff1a; 给你两个正整数 a 和 b &#xff0c;返回 a 和 b 的公因⼦的数⽬。 如果 x 可以同时整除 a 和 b &#xff0c;则认为 x 是 a 和 b 的⼀个公因⼦ 。 • ⽰例 1&#xff1a; 输⼊&#xff1a;a 12, b 6 输出&#xff1a;4 解释&#…...

【C++】C++11——右值引用和移动语义、左值引用和右值引用、右值引用使用场景和意义、完美转发、新的类功能

文章目录 C115.右值引用和移动语义5.1左值引用和右值引用5.2左值引用与右值引用比较5.3右值引用使用场景和意义5.4右值引用引用左值及其一些更深入的使用场景分析5.5完美转发 6.新的类功能 C11 5.右值引用和移动语义 右值引用是C11引入的一个新特性&#xff0c;用于支持移动语义…...

Spring Boot的创建和使用(JavaEE进阶系列2)

目录 前言&#xff1a; 1.什么是Spring Boot&#xff1f;为什么要学习Spring Boot&#xff1f; 2.Spring Boot优点 3.创建Spring Boot项目 3.1准备工作 3.2Spring Boot创建 3.2.1通过idea的方式创建 3.2.2通过网页创建 4.Spring Boot中的配置文件 4.1Spring Boot配置…...

【OLSR路由协议】链路状态路由(OLSR)协议中选择多点中继节点算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

双重差分模型(DID)论文写作指南与操作手册

手册链接&#xff1a;双重差分模型&#xff08;DID&#xff09;论文写作指南与操作手册https://www.cctalk.com/m/group/90983583?xh_fshareuid60953990 简介&#xff1a; 当前&#xff0c;对于准应届生们来说&#xff0c;毕设季叠加就业季&#xff0c;写作时间显得十分宝贵…...

ping 的工作原理

ping 是一个常用于网络诊断的命令行工具&#xff0c;用于测试两台计算机之间的网络连通性。它的工作原理如下&#xff1a; 发出 ICMP Echo 请求&#xff1a; 当你在终端中运行 ping 命令并指定目标主机的IP地址或域名时&#xff0c;计算机会创建一个特殊的ICMP&#xff08;In…...

93. 复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.011.255.24…...

竞赛选题 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…...

第15届蓝桥STEMA测评真题剖析-2023年8月20日Scratch编程中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第155讲。 第15届蓝桥第1次STEMA测评&#xff0c;这是2023年8月20日举办的STEMA&#xff0c;比赛仍然采取线上形式。这…...

html5 checkbox

1 选中状态的设置与获取 &#xff08;1&#xff09;获取checkbox是否选中&#xff1a; $("#checkbox").is(":checked");$("#checkbox-id")get(0).checked$(#checkbox-id).attr(checked)&#xff08;2&#xff09;设置checkbox是否选中 $("…...

Python统一调用多AI模型:python-tgpt库实战指南

1. 项目概述&#xff1a;一个让Python与AI对话更简单的工具 如果你最近在尝试用Python调用各种大语言模型&#xff08;LLM&#xff09;的API&#xff0c;比如OpenAI的GPT、Google的Gemini&#xff0c;或者开源的Llama、Mistral&#xff0c;那你大概率经历过这样的场景&#xf…...

【车辆控制】模糊偏航的扭矩矢量与主动转向控制系统【含Matlab源码 15444期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…...

从零构建Node.js API客户端:TypeScript封装、Axios拦截器与错误处理实战

1. 项目概述&#xff1a;一个API客户端的诞生与价值最近在对接一个名为“Seedance2”的第三方服务时&#xff0c;我发现市面上缺少一个成熟、稳定且易于集成的客户端库。官方提供的文档虽然详尽&#xff0c;但直接使用原始的HTTP请求进行交互&#xff0c;代码会迅速变得臃肿且难…...

浏览器光标锁定技术:Pointer Lock API与全屏API实战指南

1. 项目概述&#xff1a;一个解决浏览器光标“越狱”问题的实用工具如果你是一名前端开发者&#xff0c;或者经常需要制作在线演示、录屏教程&#xff0c;甚至是在开发一个网页端的游戏&#xff0c;那你一定遇到过这个让人头疼的问题&#xff1a;鼠标光标在网页里“不老实”。当…...

惠普OMEN游戏本终极性能优化指南:OmenSuperHub深度解析与实战应用

惠普OMEN游戏本终极性能优化指南&#xff1a;OmenSuperHub深度解析与实战应用 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普…...

AI编程助手Code-Buddy:本地优先、插件化架构与工程实践全解析

1. 项目概述&#xff1a;一个为开发者量身打造的智能代码伙伴 最近在逛GitHub的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫 runkids/code-buddy 。光看名字&#xff0c;“代码伙伴”&#xff0c;就让人感觉这应该是个能帮我们写代码、解决开发问题的工具。点进…...

Origin 9 绘图避坑指南:7个高频问题解决,让你的科研图表一次成型

Origin 9 科研绘图实战&#xff1a;7个高频问题深度解析与优化方案 科研绘图是数据可视化的重要环节&#xff0c;而Origin 9作为经典的科学绘图软件&#xff0c;其功能强大但操作细节繁多。许多用户在初次接触或日常使用中常会遇到各种棘手问题&#xff0c;导致绘图效率低下、图…...

微分方程详解(理工科)

一句总纲&#xff1a;微分方程不是在求一个数&#xff0c;而是在求一个函数。它研究的是&#xff1a;如果我知道一个系统“怎么变化”&#xff0c;能不能反推出它“长什么样”。普通方程&#xff1a;未知量是一个数 (x)。微分方程&#xff1a;未知量是一个函数 y(x)。它的意思是…...

学术写作AI工具排雷指南:5款主流产品深度评测(涵盖毕业与发刊需求)

每逢毕业季&#xff0c;无论是图书馆还是自习室&#xff0c;总能看到为论文熬夜奋战的身影。随着人工智能的发展&#xff0c;使用AI工具辅助提升科研效率已成为许多本硕博学生的常规操作。然而&#xff0c;不少人却陷入了一个误区&#xff1a;以为随便找个对话型AI就能搞定一切…...

从古代数学到信息学奥赛:秦九韶算法如何帮你秒杀多项式计算题?

从古代数学到信息学奥赛&#xff1a;秦九韶算法如何帮你秒杀多项式计算题&#xff1f; 在杭州西湖畔的岳王庙旁&#xff0c;矗立着一块刻有"大衍求一术"的石碑&#xff0c;这是南宋数学家秦九韶留给后人的智慧结晶。当我们今天面对一道看似普通的多项式计算题时&…...