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除了创建工程、构建工程、运行工程等功能,还具有下载依赖库、编译依赖等功能。 真正编写程序时,我们不直接用rustc,而是用cargo。 二、使用cargo (一)使用…...

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

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

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

2023年山东省安全员C证证考试题库及山东省安全员C证试题解析
题库来源:安全生产模拟考试一点通公众号小程序 2023年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…...
Java中的Unicode字符编码与占用比特位解析
本文将详细介绍Java中Unicode字符编码与占用比特位的相关知识。我们将首先介绍Unicode字符集的基本概念,然后深入探讨Java中Unicode字符的编码方式以及占用比特位的特点。最后,我们将讨论一些特殊字符的编码情况,并给出一些在Java中处理Unico…...

分布式事务-TCC案例分析流程图
防止cancel方法在最后执行出现问题,用户收到提示已经退款成功但是由于cancel过慢或者出现问题(虽然最后会重试成功但是用户体验很差),可以做以下的业务sql模型优化(增加一个冻结金额)。...

究竟是什么样的讲解数组算法的博客让我写了三小时???
版本说明 当前版本号[20231004]。 版本修改说明20231004初版 目录 文章目录 版本说明目录二. 基础数据结构2.1 数组1) 概述2) 动态数组1)插入addlast 方法测试: addlast 方法 add 方法测试:add方法 addlast 方法与 add 方法合并版get 方法测试&#x…...

Day-05 CentOS7.5 安装docker
参考 : 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函数:foreach和wildcard $(foreach var,list,text) $(wildcard pattern) 完善Makefile Makefile 在Linux中使用make工具来编译程序(特别是大程序),而make工具所执行的动作依赖于Makefil…...
c语言练习77:公因⼦的数⽬
公因⼦的数⽬ 题⽬描述: 给你两个正整数 a 和 b ,返回 a 和 b 的公因⼦的数⽬。 如果 x 可以同时整除 a 和 b ,则认为 x 是 a 和 b 的⼀个公因⼦ 。 • ⽰例 1: 输⼊:a 12, b 6 输出:4 解释&#…...

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

Spring Boot的创建和使用(JavaEE进阶系列2)
目录 前言: 1.什么是Spring Boot?为什么要学习Spring Boot? 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代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

双重差分模型(DID)论文写作指南与操作手册
手册链接:双重差分模型(DID)论文写作指南与操作手册https://www.cctalk.com/m/group/90983583?xh_fshareuid60953990 简介: 当前,对于准应届生们来说,毕设季叠加就业季,写作时间显得十分宝贵…...
ping 的工作原理
ping 是一个常用于网络诊断的命令行工具,用于测试两台计算机之间的网络连通性。它的工作原理如下: 发出 ICMP Echo 请求: 当你在终端中运行 ping 命令并指定目标主机的IP地址或域名时,计算机会创建一个特殊的ICMP(In…...
93. 复原 IP 地址
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "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编程中级组
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第155讲。 第15届蓝桥第1次STEMA测评,这是2023年8月20日举办的STEMA,比赛仍然采取线上形式。这…...
html5 checkbox
1 选中状态的设置与获取 (1)获取checkbox是否选中: $("#checkbox").is(":checked");$("#checkbox-id")get(0).checked$(#checkbox-id).attr(checked)(2)设置checkbox是否选中 $("…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...

java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
c++算法学习3——深度优先搜索
一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是: 深度优先:从起点出发,选择一个方向探索到底,直到无路可走 回溯机制:遇到死路时返回最近…...
一、ES6-let声明变量【解刨分析最详细】
一、块级作用域 { let Tim"Tim是靓仔!" } console.log("Tim:",Tim) 打印结果:Tim未进行任何定义! 原因:因为Tim定义再块级{}里面,它的声音Tim只服务于该块级里面。而打印结果是再块级外面&#…...

2025-06-02-IP 地址规划及案例分析
IP 地址规划及案例分析 参考资料 Plan for IP addressing - Cloud Adoption Frameworkwww.cnblogs.comimage-hosting/articles at master jonsam-ng/image-hosting 概述 在网络通信中,MAC 地址与 IP 地址分别位于 OSI 模型的数据链路层和网络层,二者协…...