如何用 Cargo 管理 Rust 工程系列 乙

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/__nvVZYti-G05QJHIp_f8Q

编译程序

这次我们用 cargo 来启动编译,cargo 提供了 build 指令来调度工具构建并输出软件。cargo build 只对当前目录或者向上查找目录的 Cargo.toml 文件有效,所以在启动构建前先确保已经进入对应目录

$ ll
total 16
drwxrwxr-x 3 user user 4096 Nov 14 12:00 ./
drwxrwxr-x 4 user user 4096 Nov 14 12:00 ../
-rw-rw-r-- 1 user user  179 Nov 14 12:00 Cargo.toml
drwxrwxr-x 2 user user 4096 Nov 14 12:00 src/
$ cargo buildCompiling hello_rust v0.1.0 (~/hello_rust)Finished dev [unoptimized + debuginfo] target(s) in 0.28s

如果用 cargo 启动编译时当前位置不在工程目录下,cargo 会返回错误,比如当前位置在工程目录的上一级

$ ll
total 16
drwxrwxr-x 4 fi fi 4096 Nov 14 14:37 ./
drwxrwxr-x 7 fi fi 4096 Nov 13 09:05 ../
drwxrwxr-x 4 fi fi 4096 Nov 14 14:37 hello_rust/
$ cargo build
error: could not find `Cargo.toml` in `.` or any parent directory

成功编译完成后,看看 cargo 对工程目录做了哪些动作

$ tree .
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target├── CACHEDIR.TAG└── debug├── build├── deps│   ├── hello_rust-60af8441ea417b4f│   └── hello_rust-60af8441ea417b4f.d├── examples├── hello_rust├── hello_rust.d└── incremental└── hello_rust-2bjlx50128sgs├── s-gqkvfbv0nw-nhv7s5-2a8o7auiovgp3nlm4z796zmid│   ├── 1qtaaaupissaafq6.o│   ├── 2qka353ans86m1vf.o│   ├── 2zldp55fybgg4sw7.o│   ├── 411rdzeep3a70sxa.o│   ├── 519um16fwej7v8y2.o│   ├── dep-graph.bin│   ├── nq9mqbleo31lrwv.o│   ├── query-cache.bin│   └── work-products.bin└── s-gqkvfbv0nw-nhv7s5.lock9 directories, 18 files

可以看到 cargo 管理的编译过程产生了大量的中间文件,并存放在工程的 target 子目录下,与工程同名的目标输出文件 hello_rust 也在子目录 target/debug 中。

执行输出文件

从上面可以看到 cargo 启动工程编译后的输出文件存放在工程子目录 target/debug 中,按理可以根据路径手动执行

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

但上面的输入看起来略显麻烦,所以 cargo 提供了 run 指令直接执行 package 的输出文件

$ cargo runFinished dev [unoptimized + debuginfo] target(s) in 0.04sRunning `target/debug/hello_rust`
Hello, world!

无论是从路径调用还是用 cargo run 调用,执行结果一致。

工程开发过程中,我们需要不断修改代码,然后重新输出,那么怎么中途清除那些中间文件呢?除了手动删除文件和文件夹之外,cargo 也提供了 clean 指令方便清理编译中间文件

$ cargo clean
$ tree .
.
├── Cargo.lock
├── Cargo.toml
└── src└── main.rs1 directory, 3 files

为了演示,我这里稍微改动一下源文件 main.rs

$ cat ./src/main.rs 
fn main() {println!("Hello rust's world!");
}

然后编译的时候重复依次输入 cargo build 和 cargo run 吗?

$ cargo buildCompiling hello_rust v0.1.0 (~/hello_rust)Finished dev [unoptimized + debuginfo] target(s) in 0.46s
$ cargo runFinished dev [unoptimized + debuginfo] target(s) in 0.00sRunning `target/debug/hello_rust`
Hello rust's world!

其实,cargo run 会自动识别是否需要重新编译工程,然后再执行软件,所以如果你需要同时编译和执行软件,那么直接输入 cargo run 即可

$ cargo clean
$ tree .
.
├── Cargo.lock
├── Cargo.toml
└── src└── main.rs1 directory, 3 files
$ cargo runCompiling hello_rust v0.1.0 (~/hello_rust)Finished dev [unoptimized + debuginfo] target(s) in 0.24sRunning `target/debug/hello_rust`
Hello rust's world!

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

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

相关文章

【Docker六】Docker-consul

目录 一、docker-consul概述 1、服务注册和发现: 1.1、服务注册和发现概念 1.2、服务注册和发现工作机制: 1.3、服务注册与发现的优点: 2、docker-consul概念 2.1、consul的主要特点: 二、consul架构部署: 1、…

构建强大应用的引擎:深度解析Spring Boot Starter机制

目录 引言1. Spring Boot Starter机制1.1 什么是Spring Boot Starter1.2 为什么要使用Spring Boot Starter1.3.应用场景1.4.自动加载核心注解说明 2. 综合案例配置类制作控制功能实现 总结 引言 在当今互联网时代,构建高性能、可维护的应用已成为开发者的首要任务。…

利用有限制通配符来提升API的灵活性

在Java中,有限制通配符(bounded wildcard)允许你在泛型中指定一个范围,从而提升API的灵活性。通配符使得你能够编写更通用、适用于多种类型的代码。以下是一个利用有限制通配符提升API灵活性的例子: 假设有一个简单的…

QT笔记(节选)具体图片等下载资源

QT笔记(节选)具体图片等下载资源 根据b站视频做的笔记: https://www.bilibili.com/video/BV1g4411H78N?p44&spm_id_frompageDriver&vd_sourcea3e6a48ccd3d7d1f969f662653ed68c9 qt是一个跨平台的c图形用户界面应用程序框架&#x…

【最新版】PyCharm基础调试功能详解

文章目录 一、断点1. 断点的类型a. 行断点b. 异常断点 2. 设置断点a. 设置行断点b. 设置异常断点 3. 管理断点a. 删除断点b. 将断点静音 二、调试功能0. 测试代码1. 设置断点2. 调试的多种启动方式3. 观察调试控制台a. 步过b. 步入c. 单步执行代码d. 步出e. 运行到光标处f. 重新…

LVS简介及LVS-NAT负载均衡群集的搭建

目录 LVS群集简介 群集的含义和应用场景 性能扩展方式 群集的分类 负载均衡(LB) 高可用(HA) 高性能运算(HPC) LVS的三种工作模式 NAT 地址转换 TUN IP隧道 IP Tunnel DR 直接路由 Direct Rout…

Leaflet.Graticule源码分析以及经纬度汉化展示

目录 前言 一、源码分析 1、类图设计 2、时序调用 3、调用说明 二、经纬度汉化 1、改造前 2、汉化 3、改造效果 总结 前言 在之前的博客基于Leaflet的Webgis经纬网格生成实践中,已经深入介绍了Leaflet.Graticule的实际使用方法和进行了简单的源码分析。认…

鸿蒙小车之多任务调度实验

说到鸿蒙我们都会想到华为mate60:遥遥领先!我们一直领先! 我们这个小车也是采用的是鸿蒙操作系统,学习鸿蒙小车,让你遥遥领先于你的同学。 文章目录 前言一、什么是任务?为什么要有任务二、任务的状态三、任…

Python 自动化之收发邮件(二)

发邮件之Windows进程监控 文章目录 发邮件之Windows进程监控前言一、基本内容二、基本结构三、库模块四、函数模块1.进程监控2.邮件发送 五、程序运行模块1.获取时间2.用户输入3.进程监控3.1进程启动发邮件3.2进程停止发邮件 总结 前言 上一篇简单写了一下如何进行邮件的收发操…

LeetCode 2415. 反转二叉树的奇数层:深度优先搜索(DFS)

【LetMeFly】2415.反转二叉树的奇数层:深度优先搜索(DFS) 力扣题目链接:https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c…

部署LVS的NET模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

Axure元件库的介绍以及个人简介和登录界面案例展示

目录 一. 元件介绍 二. 基本元件的使用 2.1 形状元件 2.2 图片元件 2.3 占位符 2.4 文本 2.5 线段元件 2.6 热区文件 三. 表单元件的使用 3.1 文本框 3.2 文本域 3.3 下拉列表 3.4 列表框 3.5 复选框 3.6 单选按钮 四. 菜单与表格元件的使用 4.1 树 4.2 表格…

持续集成交付CICD:GitLabCI操作Harbor仓库

目录 一、实验 1.GitLabCI操作Harbor仓库 二、问题 1.gitlab-runner连接docker daemon报错 一、实验 1.GitLabCI操作Harbor仓库 (1)修改GitLabCI共享库代码并提交到mater CI.yaml .pipelineInit:tags:- buildstage: .prevariables:GIT_CHECKOUT: …

金蝶云星空协同开发环境应用内执行单据类型脚本

文章目录 金蝶云星空协同开发环境应用内执行单据类型脚本业务界面查询单据类型表数据导出数据执行数据库脚本单据类型xml检验是否执行成功检查数据库检查业务数据 金蝶云星空协同开发环境应用内执行单据类型脚本 业务界面 查询单据类型表数据 先使用类型中文在单据类型多语言…

C++使用回调函数的两种方式

一.函数指针 #include <iostream>typedef void (*callback)(int ,int); class MyTest { public:void setCallback(callback cb){m_callback = cb;}void add(int a, int b){m_callback(a, b);}private:callback m_callback; };void onCallback(int a, int b) {std::cout …

[C++]——学习模板

了解模板——初阶 前言&#xff1a;一、模板1.1 什么是模板1.2 模板的概念1.3 模板可以做什么1.4 泛型模板 二、函数模板2.1 函数模板概念和格式2.2 函数模板原理2.3 函数模板实例化2.3.1 隐式实例化2.3.2 显式实例化 2.4 模板参数的匹配原则2.5 函数模板声明定义分离 三、类模…

若依框架springboot——修改前端图片上传样式

简述 使用过若依框架的&#xff0c;一定知道若依前端框架上传图片的样式&#xff0c;是一个正方形加号图片&#xff0c;但是如果你要使用自定义样式呢。 比如将下面这个图进行修改呢 修改后的样式 你可以直接找到element-ui 修改上传图片的组件&#xff0c;也可以加入新的组…

AcWing 1250. 格子游戏(并查集)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中&#xff0c;再连一条边&#xff0c;就围成一个封闭的圈。一般用x * n y的形式将&#xff08;x, y&#xff0…

CentOS 防火墙管理及使用的redis基本常用命令

文章目录 防火墙管理使用systemctl管理防火墙启动、关闭使用firewalld-cmd配置访问防火墙策略firewalld配置文件修改限制来源IP docker使用 redis 防火墙管理 需要关闭防火墙或者开启对应端口 使用systemctl管理防火墙启动、关闭 启动防火墙&#xff1a; systemctl start fi…

设计模式——桥接模式(结构型)

引言 桥接模式是一种结构型设计模式&#xff0c; 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c; 从而能在开发时分别使用。 问题 抽象&#xff1f; 实现&#xff1f; 听上去挺吓人&#xff1f; 让我们慢慢来&#xff0c; 先考虑一个简单的…