面向 Rust 新手的 Cargo 教程:轻松上手
面向 Rust 新手的 Cargo 教程:轻松上手
- 引言
- Cargo 简介
- 定义与重要性
- 与传统构建工具的对比
- 安装与配置 Cargo
- 在不同操作系统上安装 Rust 和 Cargo
- Windows
- macOS
- Linux
- 配置 Cargo 环境变量与路径
- 第一个 Cargo 项目
- 主要功能概述
- 结语
引言
在编程语言的浩瀚宇宙中,Rust 以其卓越的性能、内存安全保证以及现代的语法设计,正吸引着越来越多开发者的眼球。要充分发挥 Rust 的优势,了解其强大的生态系统是关键一环,其中 Cargo 作为项目管理和包构建的核心工具,扮演着无可替代的角色。
Rust 不仅仅是一种编程语言,它还是一个围绕高效、安全编程理念构建的完整生态系统。Cargo ,作为 Rust 的默认包管理器和构建系统,简化了从项目初始化、依赖管理到编译、测试和发布的整个过程。它自动化了许多繁琐的任务,让开发者能够聚焦于代码本身,而非构建配置的细枝末节。Cargo 通过清晰的 Cargo.toml 配置文件,实现了项目元数据和依赖关系的简洁表达,同时也通过强大的命令行界面,提供了丰富的功能支持。
Cargo 简介
Cargo 是 Rust 编程语言的官方包管理和构建工具,自 Rust 诞生起便内置于其生态系统中,扮演着核心支持角色。 Cargo 不仅仅是编译代码的工具,它革新了开发者管理项目的方式,通过自动化依赖处理、标准化项目结构和简化构建流程,极大地提高了开发效率和团队协作的便利性。
定义与重要性
Cargo 作为一个全面的解决方案,负责项目的创建、编译、测试、运行及打包发布等全生命周期管理。它通过读取项目根目录下的 Cargo.toml 配置文件来获取项目元数据和依赖关系,自动下载和更新所需的外部包,确保了项目依赖的一致性和最新性。 Cargo 的重要性在于它降低了 Rust 项目入门门槛,使得开发者能够快速启动新项目,无需手动处理复杂的依赖关系和构建脚本,从而专注于核心代码逻辑的实现。
与传统构建工具的对比
相比传统的构建工具,如 Make 、 CMake 或是 Ant , Cargo 引入了更加现代化的管理理念。传统构建工具往往要求开发者手动编写构建规则和依赖管理脚本,这不仅容易出错,也增加了维护成本。**而 Cargo 通过内置的智能决策机制,自动处理大部分构建细节,减少了人为错误。**此外, Cargo 集成了包注册表(如 crates.io),方便开发者发现、分享和重用高质量的第三方库,这一点与 Node.js 的 npm 或 Python 的 pip 相似,但在语言层面深度集成,提供了更紧密的生态系统支持。
安装与配置 Cargo
安装与配置 Cargo 是开启 Rust 编程之旅的首要步骤,这一过程在 Windows 、 macOS 、以及 Linux 三大主流操作系统上各有特色,但都旨在为开发者提供一个高效、统一的开发环境。下面将详细介绍如何在不同平台上安装 Rust 和 Cargo ,配置必要的环境变量,以及如何使用 cargo new 命令迈出创建首个 Rust 项目的步伐。
在不同操作系统上安装 Rust 和 Cargo
Windows
- 访问官方安装程序:首先,访问 Rust 官网的安装页面,下载适用于 Windows 的 Rust 安装器(rustup-init.exe)。
- 运行安装器:双击下载的安装器,按照提示进行安装。默认情况下,rustup 会自动安装 Rust 编程语言及其包管理器 Cargo ,并配置好环境变量。
- 验证安装:打开命令提示符(cmd.exe)或 PowerShell ,输入
cargo --version,如果显示出 Cargo 的版本号,则表示安装成功。
macOS
-
使用 rustup 安装:同样推荐使用 rustup 进行安装。打开终端,输入以下命令安装 rustup :
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
完成安装:按照提示完成安装过程,这将自动安装 Rust 和 Cargo ,并配置环境变量。
-
验证安装:在终端输入
cargo --version,确认 Cargo 已正确安装。
Linux
-
使用rustup:大多数 Linux 发行版可以通过 rustup 来安装 Rust 。在终端中输入:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
跟随提示操作:按照安装脚本的指示完成安装步骤。
-
验证安装:执行
cargo --version来验证 Cargo 是否安装成功。
配置 Cargo 环境变量与路径
在使用 rustup 安装的情况下,通常不需要手动配置环境变量,因为 rustup 安装程序会自动处理这些配置。如果你需要手动调整 PATH 环境变量(例如,因某些特殊需求),可以按照以下步骤进行:
- Windows:通过系统设置或编辑系统环境变量,确保
%USERPROFILE%\.cargo\bin被添加到 PATH 中。 - macOS/Linux:rustup 安装过程中已自动修改
.profile或相应的 shell 配置文件,如需手动添加,可以编辑~/.bashrc、~/.zshrc等文件,加入export PATH="$HOME/.cargo/bin:$PATH"。
第一个 Cargo 项目
一旦 Rust 和 Cargo 安装完成,你就可以创建你的第一个 Rust 项目了。打开终端或命令提示符,输入以下命令:
cargo new my_first_project
这会在当前目录下创建一个名为 my_first_project 的文件夹,其中包含了项目的基本结构,包括 Cargo.toml (项目配置文件)、 src 目录(存放源代码)等。接着,通过以下命令进入项目目录并运行项目:
cd my_first_project
cargo run
执行上述命令后,Cargo 会自动下载项目依赖,编译代码,并运行你的 “Hello, World!” 程序,标志着你已成功启动了 Rust 编程之旅。
主要功能概述
-
项目初始化与依赖管理: Cargo 通过
Cargo.toml文件管理项目元数据和依赖。初始化一个项目并添加一个外部依赖(如
rand库):[package] name = "my_cargo_project" version = "0.1.0" authors = ["Your Name <you@example.com>"][dependencies] rand = "0.8.5" # 指定rand库的版本通过运行
cargo build, Cargo 会自动下载并链接rand库到你的项目中,无需手动下载或配置。
-
构建(Build):Cargo 负责编译项目代码及其依赖,支持快速迭代开发和交叉编译。
只需在项目根目录下执行以下命令, Cargo 会编译项目并输出可执行文件到
target/debug目录下(对于调试构建):cargo build -
测试(Test):内置命令允许轻松运行单元测试和集成测试,确保代码质量。
编写测试代码:在
src目录下创建或修改tests模块,编写测试函数。例如:// src/main.rs #[cfg(test)] mod tests {#[test]fn it_works() {assert_eq!(2 + 2, 4);} }运行测试:通过
cargo test命令, Cargo 会自动发现并执行所有标记为#[test]的函数:cargo test -
运行(Run):直接运行开发中的项目,便于快速验证代码变更效果。
直接使用
cargo run命令即可编译并运行项目,这对于快速迭代开发非常便利:cargo run -
打包(Package):将项目及其依赖打包成可分发的格式,便于部署或分享。
打包项目:若要将项目打包为可发布的格式,可以使用
cargo package命令。这会创建一个.crate文件,包含了项目的所有源代码和元数据,准备上传到仓库。cargo package -
发布(Publish):简化了将库上传到 crates.io 或其他仓库的过程,促进代码重用和社区贡献。
发布到 crates.io :在完成打包后,认证过的用户可以使用
cargo publish命令将库发布到 crates.io 上,使得其他开发者能够轻松地将其作为依赖使用。cargo publish
结语
总之,Cargo 通过一体化的设计,不仅提升了 Rust 开发者的工作效率,也维护了生态的健康与活力,是每位 Rust 程序员不可或缺的工具。
相关文章:
面向 Rust 新手的 Cargo 教程:轻松上手
面向 Rust 新手的 Cargo 教程:轻松上手 引言Cargo 简介定义与重要性与传统构建工具的对比 安装与配置 Cargo在不同操作系统上安装 Rust 和 CargoWindowsmacOSLinux 配置 Cargo 环境变量与路径第一个 Cargo 项目 主要功能概述结语 引言 在编程语言的浩瀚宇宙中&…...
MSPM0G3507——时钟配置(与32关系)
先将32端时钟配置分为1,2,3如图 1是PSC左边未经分频的时钟源(HZ) 2是经过PSC分频的时钟信号(HZ) 3是最终的输出信号(HZ) 3输出的是一个定时器周期的HZ,可以转换成时间 …...
Linux 创建新虚拟机的全过程图解
一、创建新虚拟机 1.选择自定义 2.直接下一步 3.选择稍后安装 4.设置虚拟机名和安装位置 5.配置处理器(处理器数量:4、每个处理器的内核:2) 6. 内存选择 7.网络类型 8. IO控制器类型-默认推荐 9.磁盘类型-默认推荐 10.选择虚拟磁…...
【已解决】腾讯云安装了redis,但是本地访问不到,连接不上
汇总了我踩过的所有问题。 查看配置文件redis.conf 1、把bind 127.0.0.1给注释掉(前面加个#就是)或者改成bind 0.0.0.0,因为刚下载时它是默认只让本地访问。(linux查找文档里的内容可以输入/后面加需要匹配的内容,然后…...
python批量去除图片文字水印
#!/usr/bin/env python # -*- coding:utf-8 -*- # 需要安装的库 # pip install paddlepaddle -i https://mirrors.aliyun.com/pypi/simple/ # pip install paddleocr -i https://mirrors.aliyun.com/pypi/simple/ # pip install cv2 -i https://mirrors.aliyun.com/pypi/simple…...
C++ Qt 自制开源科学计算器
C Qt 自制开源科学计算器 项目地址 软件下载地址 目录 0. 效果预览1. 数据库准备2. 按键&快捷键说明3. 颜色切换功能(初版)4. 未来开发展望5. 联系邮箱 0. 效果预览 普通计算模式效果如下: 科学计算模式效果如下: 更具体的功能演示视频见如下链接…...
相机光学(二十八)——感光度(ISO)
感光度又称为ISO,是指相机对光线的敏感程度。ISO值越大,感光度越高,拍出来的照片就会越亮,反之就会越暗。但是ISO过高会使照片噪点也随之变高。感光度,又称为ISO值,是衡量底片对于光的灵敏程度,…...
基于全国产复旦微JFM7K325T+ARM人工智能数据处理平台
复旦微可以配合的ARM平台有:RK3588/TI AM62X/ NXP IMX.8P/飞腾FT2000等。 产品概述 基于PCIE总线架构的高性能数据预处理FMC载板,板卡采用复旦微的JFM7K325T FPGA作为实时处理器,实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具…...
HarmonyOS Next应用开发之系统概述
一、鸿蒙系统概述 鸿蒙系统可以分为华为鸿蒙系统(HUAWEI HarmonyOS)和开源鸿蒙系统(OpenHarmony),华为鸿蒙系统是基于OpenHarmony基础之上开发的商业版操作系统。他们二者的关系可以用下图来表示: 1.1、…...
RedHat运维-Linux SSH基础2-基于公钥认证
1. 要想配置基于公钥认证的SSH连接,而不是基于密码认证的SSH连接,只需要将自己的公钥传送给对方即可,假如公钥是~/.ssh/id_rsa.pub,对方是centos192.168.197.128,则命令是____________________________________&#x…...
机器学习模型运用在机器人上
机器学习模型在机器人技术中的应用非常广泛,涵盖了从简单的运动控制到复杂的认知和交互功能。以下是几种机器学习模型在机器人上的典型应用: 感知与识别: 计算机视觉:使用卷积神经网络(CNNs)识别和理解视觉…...
振弦采集仪在大型工程安全监测中的作用与意义
振弦采集仪在大型工程安全监测中的作用与意义 河北稳控科技振弦采集仪是一种用于测量振动频率的仪器,常用于大型工程的安全监测中。它通过采集振弦的振动信号,可以对工程结构的振动特性进行实时监测和分析。振弦采集仪在大型工程安全监测中具有重要的作…...
CVE-2024-36991:Splunk Enterprise任意文件读取漏洞复现 [附POC]
文章目录 CVE-2024-36991:Splunk Enterprise任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议CVE-2024-36991:Splunk Enterprise任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明:…...
Python的utils库详解
Python的utils库并不是一个官方标准库,而是指一系列提供实用功能的工具库或模块,这些库或模块通常包含了一系列帮助开发人员加速日常工作、提高开发效率的工具函数或类。由于Python社区的开放性和活跃性,存在多个不同的utils库,每…...
基于 Qt、FFmpeg 和 OpenGL 开发跨平台安卓实时投屏软件 QtScrcpy
文章目录 基于 Qt、FFmpeg 和 OpenGL 开发跨平台安卓实时投屏软件 QtScrcpy项目详细介绍1. 项目背景2. 功能特点3. 关键代码解读1. 引入必要的头文件和初始化函数2. VideoWidget 类的定义3. OpenGL 初始化和绘制函数4. 视频解码和渲染线程5. 主函数示例结语基于 Qt、FFmpeg 和 …...
LabVIEW光谱测试系统
在现代光通信系统中,光谱分析是不可或缺的工具。开发了一种基于LabVIEW的高分辨率光谱测试系统,通过对可调谐激光器、可编程光滤波器和数据采集系统的控制,实现了高效、高精度的光谱测量。 项目背景 随着光通信技术的迅速发展,对…...
SpringBoot使用@RestController处理GET和POST请求
在Spring MVC中,RestController注解的控制器类可以处理多种HTTP请求方法,包括GET和POST。这些请求方法通过特定的注解来映射,比如GetMapping用于GET请求,PostMapping用于POST请求。这些注解是RequestMapping的特定化版本ÿ…...
Kudu分区策略
Kudu表的分区策略主要有三种:范围分区(Partition By Range)、哈希分区(Partition By Hash)和高级分区(Partition By Hash And Range)。这些策略都要求分区字段必须包含在主键中。 范围分区&…...
spring的bean注册
bean注册 第三方jar包的类想添加到ioc中,加不了Component该怎么办呢。 可以使用Bean和Import引入jar包,可以使用maven安装到本地仓库。 修改bean的名字:Bean("aaa")使用ioc的已经存在的bean对象,如Country:p…...
权限控制权限控制权限控制权限控制权限控制
1.权限的分类 视频学习:https://www.bilibili.com/video/BV15Q4y1K79c/?spm_id_from333.337.search-card.all.click&vd_source386b4f5aae076490e1ad9b863a467f37 1.1 后端权限 1. 后端如何知道该请求是哪个用户发过来的 可以根据 cookie、session、token&a…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
