面向 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…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
