使用Cargo工具高效创建Rust项目


Posted in Javascript onAugust 14, 2022

前言

本文紧跟上篇Rust博文内容,讲解Cargo工具在Rust项目创建时的妙用,手把手教你使用Cargo工具在黑窗口创建项目。此外,创建项目之后,简单的做一个Rust语言中输入输出的测试,上文提到学好Rust语言的方法就是一步一步打基础,因此仍要潜心修炼,打牢基础。

一、功能强大的Cargo工具

1、Cargo工具是什么?

  • Cargo是Rust 的构建系统和包管理工具,主要功能包括:
    • 创建和管理 Rust 的模块系统
    • 下载和管理依赖库
    • 调用rustc或其他构建工具来构建项目
  • 安装Rust 的时候会自动安装Cargo
    • 验证的命令:cargo --version

2、使用Cargo命令创建 hello_cargo 项目

命令:cargo new hello_cargo

使用Cargo工具高效创建Rust项目

其中code .是VSC工具的命令,意思是使用他来打开项目文件:

使用Cargo工具高效创建Rust项目

可以看到Cargo工具为我们生成了其他的文件,具体看一下都是什么作用:

自动创建了一个新目录hello_cargo,包含:

  • Cargo.toml
  • src目录
    • main.rs
  • 初始化了一个新的Git仓库:.gitignore
    • 可以使用其他的vcs(版本控制系统)
    • 或者不适用vcs:cargo new 项目名 --vcs

3、项目文件目录里各文件的内容和特点

  • Cargo.toml
  • TOML(Tom’s Obvious,Minimal Language)格式,存放Cargo的配置

使用Cargo工具高效创建Rust项目

  • [package],是一个区域标题,表示下方内容是用来配置包的(package)
  • name:项目名
  • version:项目版本
  • edition:使用的Rust版本
  • [dependencies]
  • 另一个区域的开始,它会列出项目的依赖项。
  • 在Rust里,代码的包写做:crate

2.src/main.rs

  • cargo生成的 main.rs 在src目录下,此外源代码都应该放在src目录下
  • 而cargo.toml在项目顶层下
  • 顶层目录可以放置:RENAME、许可信息、配置文件等
  • 将非cargo创建的项目转化为cargo的方法:
  • 把源代码移动到src里面
  • 创建cargo.toml并填写相应的配置

3.Cargo.lock

  • 第一次执行Cargo build命令会在顶层目录生成 cargo.lock文件
  • 该文件负责追踪项目依赖的精确版本
  • 不需要手动修改此文件

4、Cargo 常用命令

  • cargo build
  • 创建可执行文件:target\debug\hello_cargo.exe
  • cargo run
  • 构建和运行cargo项目,编译代码+执行结果
  • 如果之前编译过且源码没有发生改变,则会直接运行二进制文件
  • cargo check
  • 检查代码,确保能够通过编译,但是不产生任何可执行文件
  • cargo check 要比 cargo build 快得多
  • 编写代码得时候可以周期性得使用cargo check命令检查代码,提高效率
  • cargo build --release
  • 一共两种配置:
  • 开发使用 :cargo build
  • 正式发布: cargo build --release
  • 为发布构建,编译时会进行优化
  • 代码运行速度会更快,但是编译时间长
  • 会在target/release 目录下生成可执行文件,而不是 target/debug

二、Rust 语言的输入输出

1、输入输出测试

源码:

use std::io;
fn main() {
    println!("测试输入输出功能");
    println!("从键盘输入一个数字:");

    let mut a=String::new();

    io::stdin().read_line(&mut a).expect("无法读取行");
    
    println!("输出结果为:{}",a);
}

运行效果:

使用Cargo工具高效创建Rust项目

2、具体代码解析

接下来把不熟悉的代码依次解释:

let mut a=String::new();
 

let用来声明变量,mut代表该变量值可修改,String::new()意思是调用String类的实例。

  • 在Rust 中默认变量不可修改,加上mut 才可以被修改
  • new 在Rust 中常用来创建类型实例
  • 这句话的意思就是将一个空白的字符串绑定到可变的字符串变量a上
use std::io;
io::stdin().read_line(&mut a).expect("无法读取行");

use用来引入库,std::io在Rust 中代表标准的输入输出,整体可理解为c中的#include<stdio.h>
在io库调用stdin()类里的read_line()方法,而该方法需要传入可变字符串,因此将 &mut a传入,
为什么要加地址符&呢,这里啊用到了C++里的引用,这样参数列表里字符串的变化会修饰实参a的变化,且不会产生副本,安全高效。最后还有一个ecpect()方法,read_line()方法会返回一个Result枚举类型,含有Ok 和 Err 两个变体。

  • 如果Result返回的是Err,那么expect()方法就会中断整行代码并打印expect里的信息。
  • 如果返回的是OK,那么就会把read_line()方法中得到的值赋给OK一并返回给用户。
println!("输出结果为:{}",a);

类似于c 里的 printf("输出结果为%d",a);上面的{}是一个占位符,输出的时候会被后面变量的值取代,有几个{}后面就有多少变量。

到此这篇关于使用Cargo工具高效创建Rust项目的文章就介绍到这了,更多相关Rust输入输出语句内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
用jquery实现下拉菜单效果的代码
Jul 25 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
移动设备web开发首选框架:zeptojs介绍
Jan 29 Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 Javascript
javascript小数精度丢失的完美解决方法
May 31 Javascript
基于AngularJS前端云组件最佳实践
Oct 20 Javascript
vuex实现简易计数器
Oct 27 Javascript
javascript设计模式之中介者模式学习笔记
Feb 15 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
vue - vue.config.js中devServer配置方式
Oct 30 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
Aug 14 #Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 #Vue.js
Vue深入理解插槽slot的使用
Aug 05 #Vue.js
React如何使用axios请求数据并把数据渲染到组件
Aug 05 #Javascript
使用JS前端技术实现静态图片局部流动效果
Aug 05 #Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 #Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 #Javascript
You might like
php转换颜色为其反色的方法
2015/04/27 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
python中MethodType方法介绍与使用示例
2017/08/03 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
单位单身证明范本
2014/01/11 职场文书
打造完美自荐信
2014/01/24 职场文书
六一节目主持词
2014/04/01 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
催款通知书范文
2015/04/17 职场文书
校运会宣传稿大全
2015/07/23 职场文书
导游带团欢迎词
2015/09/30 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
win10清理dns缓存
2022/04/19 数码科技