首页 > 其他分享 >01_Rust开发环境准备

01_Rust开发环境准备

时间:2024-11-11 18:41:23浏览次数:1  
标签:cargo 01 Cargo 项目 开发 toml ustc Rust

安装rust环境

windows安装

rustup 是 Rust 的安装程序,也是它的版本管理程序。使用rustup来进行安装。

我是在windows上进行安装。在 RUSTUP-INIT 下载系统相对应的 Rust 安装程序,一路默认即可。其中第一步中默认的需要安装Microsoft C++ Build Tools的C++环境。准备好 C++ 环境后开始安装 Rust。一路默认,就安装完成。

(我在下载的时候下载速度非常慢。)

下载速度慢解决方法

参考windows安装配置rust

设置环境变量

RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
RUSTUP_HOME=D:\rust\.rustup
CARGO_HOME=D:\rust\.cargo

image-20241105162622553

更新

更新 Rust,在终端执行以下命令即可更新:

$ rustup update

卸载

要卸载 Rust 和 rustup,在终端执行以下命令即可卸载:

$ rustup self uninstall

检查安装是否成功

image-20241105163035328

运行 rustup doc 让浏览器打开本地文档。

使用vscode编辑器开发

安装rust的插件

  • rust-analyzer

安装完成后,在第一次打开 Rust 项目时,需要安装一些依赖,具体的状态在左下角会进行提示,包括下载、代码构建、building 等。

当插件使用默认设置时,每一次保存代码,都会出进行一次重新编译。

  • Even Better TOML,支持 .toml 文件完整特性
  • Error Lens, 更好的获得错误展示
  • One Dark Pro, 非常好看的 VSCode 主题
  • CodeLLDB, Debugger 程序

认识Cargo

Rust 吸收了多个语言的包管理优点,提供了包管理工具Cargo

cargo 提供了一系列的工具,从项目的建立、构建到测试、运行直至部署,为 Rust 项目的管理提供尽可能完整的手段。同时,与 Rust 语言及其编译器 rustc 紧密结合。

创建第一个新项目

$ cargo new hello_world  
$ cd world_hello

cargo默认创建bin类型的项目。

Rust 项目主要分为两个类型:binlib,前者是一个可运行的项目,后者是一个依赖库项目。

项目结构:

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

运行项目

cargo run

image-20241105165640727

cargo run 首先对项目进行编译,然后再运行,因此它实际上等同于运行了两个指令,下面我们手动试一下编译和运行项目:

编译

$ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s

运行

$ ./target/debug/world_hello
Hello, world!

想要高性能的代码怎么办? 添加 --release 来编译:

  • cargo run --release
  • cargo build --release

试着运行一下我们高性能的 release 程序:

$ ./target/release/hello_world
Hello, world!
  • 手动编译和运行项目

cargo check

当项目大了后,cargo runcargo build 不可避免的会变慢,有没有更快的方式来验证代码的正确性呢?

cargo check 是我们在代码开发过程中最常用的命令,它的作用很简单:快速的检查一下代码能否编译通过。因此该命令速度会非常快,能节省大量的编译时间。

image-20241105171009500

cargo.toml 和 cargo.lock

cargo.toml 和 cargo.lock是cargo的核心文件,他的所有活动均基于此二者。

  • Cargo.tomlcargo 特有的项目数据描述文件。它存储了项目的所有元配置信息,如果 Rust 开发者希望 Rust 项目能够按照期望的方式进行构建、测试和运行,那么,必须按照合理的方式构建 Cargo.toml
  • Cargo.lock 文件是 cargo 工具根据同一项目的 toml 文件生成的项目依赖详细清单,因此我们一般不用修改它,只需要对着 Cargo.toml 文件撸就行了。

什么情况下该把 Cargo.lock 上传到 git 仓库里? 当你的项目是一个可运行的程序时,就上传 Cargo.lock,如果是一个依赖库项目,那么请把它添加到 .gitignore 中。

package 配置段落

package 中记录了项目的描述信息,典型的如下:

image-20241105172129111

name 字段定义了项目名称,version 字段定义当前版本,新项目默认是 0.1.0edition 字段定义了我们使用的 Rust 大版本。

定义项目依赖

使用 cargo 工具的最大优势就在于,能够对该项目的各种依赖项进行方便、统一和灵活的管理。

Cargo.toml 中,主要通过各种依赖段落来描述该项目的各种依赖项:

  • 基于 Rust 官方仓库 crates.io,通过版本说明来描述
  • 基于项目源代码的 git 仓库地址,通过 URL 来描述
  • 基于本地项目的绝对路径或者相对路径,通过类 Unix 模式的路径来描述

这三种形式具体写法如下:

[dependencies]
rand = "0.3"
hammer = { version = "0.5.0"}
color = { git = "https://github.com/bjz/color-rs" }
geometry = { path = "crates/geometry" }

下载依赖很慢

开启命令行或全局代理

或者是修改rust的下载镜像为国内的镜像地址。

为了使用 crates.io 之外的注册服务,我们需要对 $HOME/.cargo/config.toml ($CARGO_HOME 下) 文件进行配置,添加新的服务提供商,有两种方式可以实现:增加新的镜像地址和覆盖默认的镜像地址。

增加新的镜像地址

首先是在 crates.io 之外添加新的注册服务,在 $HOME/.cargo/config.toml (如果文件不存在则手动创建一个)中添加以下内容:

[registries]
ustc = { index = "https://mirrors.ustc.edu.cn/crates.io-index/" }

这种方式只会新增一个新的镜像地址,因此在引入依赖的时候,需要指定该地址,例如在项目中引入 time 包,你需要在 Cargo.toml 中使用以下方式引入:

[dependencies]
time = {  registry = "ustc" }

在重新配置后,初次构建可能要较久的时间,因为要下载更新 ustc 注册服务的索引文件,由于文件比较大,需要等待较长的时间。

此处有两点需要注意:

  • cargo 1.68 版本开始支持稀疏索引,不再需要完整克隆 crates.io-index 仓库,可以加快获取包的速度,如:
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
  • cargo search 无法使用镜像

覆盖默认的镜像地址

事实上,我们更推荐第二种方式,因为第一种方式在项目大了后,实在是很麻烦,全部修改后,万一以后不用这个镜像了,你又要全部修改成其它的。

而第二种方式,则不需要修改 Cargo.toml 文件,因为它是直接使用新注册服务来替代默认的 crates.io

$HOME/.cargo/config.toml 添加以下内容:

[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

首先,创建一个新的镜像源 [source.ustc],然后将默认的 crates-io 替换成新的镜像源: replace-with = 'ustc'

标签:cargo,01,Cargo,项目,开发,toml,ustc,Rust
From: https://www.cnblogs.com/binbinzhidao/p/18540335

相关文章

  • 鸿蒙NEXT开发案例:指尖轮盘
     【1】引言“指尖轮盘”是一个简单而有趣的互动游戏(类似抓阄),这个应用通过触摸屏幕的方式,让玩家参与一个激动人心的游戏,最终选出幸运的赢家。未来可以进一步扩展功能,如增加游戏模式、优化动画效果、增加音效等,提升用户体验。【2】环境准备电脑系统:windows10开发工具:DevEco......
  • rust学习七、枚举
    枚举是十分特别的类型,是因为和大部分语言中看起来不太一样。最大的不同之一在于:允许每个成员具有不同的类型的属性 注:本文内容根据<<TherustprogrammmingLanguage>>有关章节编写如果没有特别说明,"rust学习"系列基本上都是根据此书编写,不再在后续的篇幅中说明一、定义、赋......
  • win 11 开发板,windows,ubuntu虚拟机网络互通
    确保在同一个网段里面就行如果ping开发板不通,将win防火墙关闭了试一试虚拟机使用桥接模式,桥接到正确的网卡上,此处使用的是usb网卡编辑->虚拟机网络编辑器ubuntu手动设置桥接的网卡信息此处ens32是桥接的网卡ens33是NAT网卡windows也是同样设置,注意网段保持一致虚拟......
  • 20222301 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:①DNS注册人及联系方式②该域名对应IP地址③IP地址注册人及联系方式④IP地址所在国家、城市和具体地理位置(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所......
  • 使用wxpython开发跨平台桌面应用,基类列表窗体的抽象封装处理
    在开发一套系统框架的时候,除了关注实现系统的功能实现外,我们对于系统的各个方面都是应该精益求精,以最少的编码做最好的事情,在开发的各个层次上,包括前端后端,界面处理、后端处理、常用辅助类、控件封装等等方面,我们都可以通过抽象、重用等方式,实现代码的优化、简化,以期达到快速开发......
  • AI智能直播话术功能设计开发!
    AI智能直播,作为当今直播行业的一大创新趋势,正逐步改变着我们的直播体验,随着人工智能技术的不断进步,AI智能直播话术功能的设计与开发成为了众多开发者关注的焦点。这一功能旨在通过智能算法,为直播内容提供更加丰富、多样且个性化的互动话术,从而提升直播的趣味性和观众的参与度......
  • AT_agc012_f [AGC012F] Prefix Median 题解
    首先将序列排序,这是显然的。考虑倒着确定\(b\)序列中的每个数。即从完整的\(a\)序列开始,每次删掉两个数,记录中位数。先找出\(b\)序列合法的条件。容易发现对于所有\(i\),在\(b_{p_i}\)成为中位数时,\(p_i,p_{i+1}\)之间的所有数都已经被删除了,且\(i\lep_i\le2n-i\)。......
  • 超强抗干扰单键触摸/电容式触控IC-VK3601 SOT23-6单通道直接输出/触摸感应方案原厂
    产品品牌:永嘉微电/VINKA产品型号:VK3601封装形式:SOT23-6概述VK3601具有1个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较高的集成度,仅需极少的外部组件便可实现触摸按键的检测。提供了1路直接输出功能。芯片内部采用特殊的集成电路,具有高电源电压抑制比,可......
  • 101. 对称二叉树
    题目链接解题思路检查一个二叉树是否轴对称,其实和根结点无关,而是和其左右子树有关。左子树头等于右子树头,然后递归调用,「左子树的右儿子」要等于「右子树的左儿子」并且「左子树的左儿子」要等于「右子树的左儿子」。代码/***Definitionforabinarytreenode.......
  • 【双11最后一天】活动商品低至8折!DL32逻辑分析仪Pro、加热台、电烙铁、开发板等活动产
    【双11最后一天】活动商品低至8折!DL32逻辑分析仪、加热台、电烙铁、开发板等活动产品限时优惠!各种爆款产品火热售卖中!双11最后一天,全店活动商品低至8折!全新DL32逻辑分析仪、HP15加热台,还有爆款产品T80智能电烙铁、DS100Mini手持示波器,开发板等活动产品限时优惠!各种新品及爆款产......