初识Cargo:Rust的强大构建工具与包管理器

news2025/2/4 4:54:45

初识Cargo:Rust的强大构建工具与包管理器

如果你刚刚开始学习Rust,一定会遇到一个名字:Cargo。Cargo是Rust的官方构建工具和包管理器,它让Rust项目的创建、编译、测试和依赖管理变得非常简单。本文将带你快速了解Cargo的基本用法,帮助你轻松上手Rust开发!


1. 什么是Cargo?

Cargo是Rust的构建工具包管理器,类似于其他语言中的工具(如Node.js的npm、Python的pip)。它的主要功能包括:

  • 创建和管理项目:快速初始化新项目,生成标准目录结构。
  • 编译代码:自动编译项目并生成可执行文件。
  • 管理依赖:轻松添加、更新和删除第三方库。
  • 运行测试:一键运行项目中的单元测试和集成测试。
  • 生成文档:自动生成项目的API文档。

Cargo是Rust开发的核心工具,几乎每个Rust项目都会用到它。


2. 安装Cargo

当你安装Rust时,Cargo会自动安装。可以通过以下命令检查Cargo是否安装成功:

cargo --version

如果看到类似cargo 1.xx.x (xxxxxxx yyyy-mm-dd)的输出,说明Cargo已经安装成功。


3. 使用Cargo创建项目

使用Cargo创建新项目非常简单。打开终端,运行以下命令:

cargo new hello_cargo

这会在当前目录下创建一个名为hello_cargo的新项目。进入项目目录:

cd hello_cargo

你会看到以下文件和目录:

  • Cargo.toml:项目的配置文件,包含元信息和依赖。
  • src/main.rs:主程序文件,里面已经包含了一个“Hello, World!”示例。
Cargo.toml文件

Cargo.toml是项目的配置文件,内容如下:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

[dependencies]
  • [package]部分定义了项目的名称、版本和Rust版本。
  • [dependencies]部分用于声明项目的依赖。
src/main.rs文件

src/main.rs是项目的主程序文件,内容如下:

fn main() {
    println!("Hello, world!");
}

这是一个简单的“Hello, World!”程序。


4. 编译和运行项目

在项目目录中,运行以下命令编译并运行项目:

cargo run

Cargo会自动编译代码并运行生成的可执行文件。你会看到输出:

Hello, world!

如果你想只编译代码而不运行,可以使用:

cargo build

这会在target/debug目录下生成可执行文件。


5. 添加依赖

Cargo的一个强大功能是依赖管理。假设你想在项目中使用一个第三方库(如rand生成随机数),只需在Cargo.toml[dependencies]部分添加库的名称和版本:

[dependencies]
rand = "0.8"

然后运行以下命令下载并编译依赖:

cargo build

Cargo会自动下载rand库并将其添加到项目中。


6. 其他常用命令

Cargo提供了许多有用的命令,以下是一些常用的命令:

  • 检查代码:检查代码是否可以编译,但不生成可执行文件。

    cargo check
    
  • 运行测试:运行项目中的所有测试。

    cargo test
    
  • 生成文档:生成项目的API文档,并在浏览器中打开。

    cargo doc --open
    
  • 清理项目:删除编译生成的文件。

    cargo clean
    

7. 为什么使用Cargo?

  • 标准化:Cargo为Rust项目提供了标准化的结构和工具,让开发更加规范。
  • 自动化:Cargo自动处理依赖、编译和测试,减少手动操作。
  • 社区支持:Cargo与Rust生态系统紧密集成,几乎所有Rust库都支持Cargo。

8. 总结

Cargo是Rust开发中不可或缺的工具,它让项目的创建、编译、测试和依赖管理变得非常简单。通过本文,你已经学会了:

  1. 如何使用Cargo创建新项目。
  2. 如何编译和运行项目。
  3. 如何添加依赖。
  4. 如何使用Cargo的其他常用命令。

接下来,你可以继续探索Cargo的更多功能,比如编写测试、发布项目等。希望这篇文章能帮助你快速上手Cargo,开启愉快的Rust开发之旅!

如果你有任何问题或需要进一步的帮助,欢迎在评论区留言。Happy Coding!🚀


参考资源

  • Rust官方Cargo指南
  • Cargo官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows7和Windows10下从零搭建Qt+Leaflet开发环境】

Windows7和Windows10下从零搭建QtLeaflet开发环境 本文开始编写于2025年1月27日星期一(农历:腊月二十八,苦逼的人,过年了还在忙工作)。 第一章 概述 整个开发环境搭建需要的资源: 操作系统 Windows7_x6…

关于MySQL InnoDB存储引擎的一些认识

文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的?1.1 MySQL的存储引擎有哪些?1.2 MyIsam和InnoDB有什么区别? 2.MySQL表的结构是什么?2.1 行结构是什么样呢?2.1.1 NULL列表?2.1.2 char和varc…

WSL2中安装的ubuntu开启与关闭探讨

1. PC开机后,查询wsl状态 在cmd或者powersell中输入 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 22. 从windows访问WSL2 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 23. 在ubuntu中打开一个工作区后…

π0:仅有3B数据模型打通Franka等7种机器人形态适配,实现0样本的完全由模型自主控制方法

Chelsea Finn引领的Physical Intelligence公司,专注于打造先进的机器人大模型,近日迎来了一个令人振奋的里程碑。在短短不到一年的时间内,该公司成功推出了他们的首个演示版本。这一成就不仅展示了团队的卓越技术实力,也预示着机器…

pandas(二)读取数据

一、读取数据 示例代码 import pandaspeople pandas.read_excel(../002/People.xlsx) #读取People数据 print(people.shape) # 打印people表的行数、列数 print(people.head(3)) # 默认打印前5行,当前打印前3行 print("") print(people.tail(3)) # 默…

向上调整算法(详解)c++

算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 这里为什么插入85完后合法? 我们插入一个85,…

LabVIEW无线齿轮监测系统

本案例介绍了基于LabVIEW的无线齿轮监测系统设计。该系统利用LabVIEW编程语言和改进的天牛须算法优化支持向量机,实现了无线齿轮故障监测。通过LabVIEW软件和相关硬件,可以实现对齿轮箱振动信号的采集、传输和故障识别,集远程采集、数据库存储…

力扣第435场周赛讲解

文章目录 题目总览题目详解3442.奇偶频次间的最大差值I3443.K次修改后的最大曼哈顿距离3444. 使数组包含目标值倍数的最少增量3445.奇偶频次间的最大差值 题目总览 奇偶频次间的最大差值I K次修改后的最大曼哈顿距离 使数组包含目标值倍数的最少增量 奇偶频次间的最大差值II …

内存四区

一、内存四区模型 1. 操作系统把物理硬盘代码load到内存 2. 操作系统把c代码分成四个区 3. 操作系统遭到main函数入口执行 二、内存四区 1. 栈区(stack) 由编译器自动分配释放,存放函数的参数值,局部变量的值。其操作方式类似…

大模型综合性能考题汇总

- K1.5长思考版本 一、创意写作能力 题目1:老爸笑话 要求:写五个原创的老爸笑话。 考察点:考察模型的幽默感和创意能力,以及对“原创”要求的理解和执行能力。 题目2:创意故事 要求:写一篇关于亚伯拉罕…

租赁管理系统在促进智能物业运营中的关键作用和优化策略分析

租赁管理系统在智能物业运营中的关键作用与优化策略 随着科技的飞速发展,租赁管理系统在智能物业运营中扮演着越来越重要的角色。这种系统不仅提高了物业管理的效率,更是促进了资源的优化配置和客户关系的加强。对于工业园、产业园、物流园、写字楼和公…

【论文复现】基于Otsu方法的多阈值图像分割改进鲸鱼优化算法

目录 1.摘要2.鲸鱼优化算法WOA原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了一种基于Otsu方法的多阈值图像分割改进鲸鱼优化算法(RAV-WOA)。RAV-WOA算法能够在分割灰度图像和彩色图像时,自动选择最优阈值,并确…

关于系统重构实践的一些思考与总结

文章目录 一、前言二、系统重构的范式1.明确目标和背景2.兼容屏蔽对上层的影响3.设计灰度迁移方案3.1 灰度策略3.2 灰度过程设计3.2.1 case1 业务逻辑变更3.2.2 case2 底层数据变更(数据平滑迁移)3.2.3 case3 在途新旧流程兼容3.2.4 case4 接口变更3.2.5…

电介质超表面中指定涡旋的非线性生成

涡旋光束在众多领域具有重要应用,但传统光学器件产生涡旋光束的方式限制了其在集成系统中的应用。超表面的出现为涡旋光束的产生带来了新的可能性,尤其是在非线性领域,尽管近些年来已经有一些研究,但仍存在诸多问题,如…

学习日记-250202

现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…

【Rust自学】16.3. 共享状态的并发

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 16.3.1. 使用共享来实现并发 还记得Go语言有一句名言是这么说的:Do not communicate by sharing memory; instead, share me…

LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略

LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略 目录 Math-To-Manim的简介 1、特点 2、一个空间推理测试—考察不同大型语言模型如何解释和可视化空间关系 3、DeepSeek R1-Zero的简介:处理更…

2025年2月2日(网络编程 tcp)

tcp 循环服务 import socketdef main():# 创建 socket# 绑定tcp_server socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server.bind(("", 8080))# socket 转变为被动tcp_server.listen(128)while True:# 产生专门为链接进来的客户端服务的 socketprint(&qu…

WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载

Windows中安装wsl2,wsl2里安装ubuntu。 1. Wsl启动后 1)Windows下ip ipconfig 以太网适配器 vEthernet (WSL (Hyper-V firewall)): 连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 172.19.32.1 子网掩码 . . . . . . . .…

2025-工具集合整理

科技趋势 github-rank 🕷️Github China/Global User Ranking, Global Warehouse Star Ranking (Github Action is automatically updated daily). 科技爱好者周刊 制图工具 D2 D2 A modern diagram scripting language that turns text to diagrams 文档帮助 …