当前位置: 首页 > 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是否选中 $("…...

教育机构搭建AI辅助教学系统时如何通过Taotoken统一接口

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 教育机构搭建AI辅助教学系统时如何通过Taotoken统一接口 构建一个服务于师生的AI辅助教学系统&#xff0c;通常需要集成多种能力&a…...

巨头转身难的地方,我们的星辰大海:开发版机巢,为千行百业而生

未来的低空经济图景是怎样的&#xff1f;它绝不仅仅是几架无人机在天上飞。 未来的城市与能源基础设施中&#xff0c;将隐藏着无数形态各异、能力专精的“机巢”。它们将像毛细血管一样渗透在城市的各个角落&#xff0c;定时自动穿梭&#xff0c;替代人力进行精细化巡检&#x…...

从ValueError到精准评估:解决超分辨率重建中SSIM/PSNR计算的三大实战难题

1. 从报错到理解&#xff1a;新版skimage的SSIM/PSNR计算函数变迁 第一次用skimage计算超分辨率重建指标时&#xff0c;我就被当头一棒——熟悉的compare_ssim和compare_psnr居然报"ImportError"。这就像你习惯去小区东门拿快递&#xff0c;突然发现快递柜搬到了西门…...

Prisma AI插件OpenClaw:用自然语言智能查询数据库

1. 项目概述&#xff1a;一个为Prisma生态注入AI能力的开源插件如果你正在使用Prisma作为你的Node.js或TypeScript项目的ORM&#xff08;对象关系映射&#xff09;工具&#xff0c;并且对如何将生成式AI的能力无缝集成到数据库操作中感到好奇&#xff0c;那么你很可能已经听说过…...

如何快速上手PCL点云库:10个核心模块详解与实践

如何快速上手PCL点云库&#xff1a;10个核心模块详解与实践 【免费下载链接】pcl-learning &#x1f525;PCL&#xff08;Point Cloud Library&#xff09;点云库学习记录 项目地址: https://gitcode.com/gh_mirrors/pc/pcl-learning PCL&#xff08;Point Cloud Librar…...

.NET AES 讲透:从 ECB 到 GCM,到底差在哪?

AES&#xff0c;全称高级加密标准&#xff08;Advanced Encryption Standard&#xff09;。简单说&#xff0c;它是目前全球最主流的对称加密算法&#xff1a;同一把钥匙负责加密和解密。 HTTPS、手机文件加密、数据库、云存储……现代互联网里大量“数据保密”场景&#xff0…...

基于RT-Thread与N32G457的三通道UART透明监控网关设计与实现

1. 项目概述与核心需求解析在嵌入式开发&#xff0c;特别是涉及工业控制、智能硬件或者多设备联调的现场&#xff0c;我们经常会遇到一个非常实际的痛点&#xff1a;如何在不干扰原有通信链路的前提下&#xff0c;实时监控两台设备之间的串口数据交互。无论是调试新的通信协议&…...

DeepSeek MMLU成绩暴涨11.2分的秘密武器:不是更大参数,而是这个被顶会论文雪藏2年的校准框架(附开源复现代码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek MMLU成绩暴涨11.2分的实证现象 近期&#xff0c;DeepSeek-R1 在大规模多任务语言理解&#xff08;MMLU&#xff09;基准测试中取得显著突破——其零样本准确率从 72.3% 提升至 83.5%&#xff…...

Termius中文版:安卓SSH客户端的完整汉化解决方案

Termius中文版&#xff1a;安卓SSH客户端的完整汉化解决方案 【免费下载链接】Termius-zh_CN 汉化版的Termius安卓客户端 项目地址: https://gitcode.com/alongw/Termius-zh_CN 对于需要频繁管理远程服务器的中文用户来说&#xff0c;英文界面的SSH客户端常常成为技术操…...

3步掌握VADER情感分析:颠覆传统NLP方法的实战指南

3步掌握VADER情感分析&#xff1a;颠覆传统NLP方法的实战指南 【免费下载链接】vaderSentiment VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is specifically attuned to s…...