如何用 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.hqwc.cn/news/278324.html

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

相关文章

HTTP 414错误:请求URI过长,如何避免

在Web开发中,HTTP状态码是用于表示Web服务器响应的各种状态。其中,HTTP 414错误表示请求URI过长,这意味着客户端发送的请求URL超过了服务器所能处理的长度限制。 当请求的URI过长时,服务器可能无法正确处理请求,从而导…

一些好用的VSCode扩展

可以在扩展这里直接搜索需要的扩展,点击安装即可。 1.Chinese 中文扩展,就是说虽然咱们懂点英语,但还是中文看着方便 2.Auto Rename Tag 当你重命名一个HTML 标签时,会自动重命名与他配对的HTML 标签 当你选择h4这个标签时&…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR:ControlNet 使得我们能通过输入额外的条件图(如 Canny 边缘、人体姿态、深度图等),对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

Vue用<br>自定义换行,用v-html渲染,hover的时候title也需要使用自定义换行或者显示一行用省略号展示,hover展示全部

哈喽 大家好啊,最近遇到一个需求&#xff1a; 需求一&#xff1a;用<br>自定义换行&#xff0c;hover的时候title也需要使用自定义换行 然后我便想到了用<br>自定义换行&#xff0c;然后用v-html渲染&#xff0c;则就正常显示了 但是title只能用文本&#xff0c…

TCP服务器的编写(上)

tcp服务器的初始化&#xff0c;第一件事情就是创建套接字 目前来说我们的tcp套接和udp套接是没有任何区别的&#xff01;&#xff01;&#xff01; 那么接下来&#xff0c;如果是udp创建好套接字在进行绑定&#xff0c;那么基本上就完成我们udp服务器的初始化 而我们tcp创建好…

node.js学习(简单聊天室)

在掘金查看该文章 1. TCP服务搭建 1.1 socket 先来粗略了解下socket 套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&am…

对BIOS进行简单快速的设置更改,就能启用安全引导来安装Windows 11

本文介绍如何在UEFI/BIOS中启用安全引导&#xff0c;以便继续安装Windows 11。 如何启用安全引导 启用安全引导最简单的方法是通过UEFI/BIOS进行。它通常被列为BIOS中的众多选项之一&#xff0c;因此你只需打开它即可启用它。 1、启动&#xff0c;或重新启动你的电脑或笔记本…

华为配置VRRP负载分担示例

组网需求 如图1所示&#xff0c;HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;Switc…

基于C/C++的libcurl多协议文件传输库dll二次封装开发使用

libcurl 可能是最便携、最强大和最常用的 这个星球上的网络传输库。官方提供的示例&#xff0c;需要在项目中引用到libcurl-imp.lib才能使用。 这里我改造了下工程&#xff0c;将常用的接口导出到了libcurl.dll中方便直接在后续的工程代码中应用&#xff0c;下面可以看到dll常用…

掌握 RPC 接口测试:一篇详尽的接口测试手册

RPC 是什么&#xff1f; 远程过程调用协议&#xff08;RPC&#xff09;是一种技术&#xff0c;它允许在不同的机器上执行函数&#xff0c;就好像这些函数是本地调用一样。简单地说&#xff0c;客户端系统透明地从网络上的远程服务器软件请求服务&#xff0c;而无需理解复杂的网…

jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱

前言 个人其实一直的不太喜欢用邮箱发送报告&#xff0c;测试报告用邮件通知这都是五六年前的事情了&#xff0c;但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。 配置你的邮箱 配置邮箱这一步最繁琐&#xff0c;由于每个人使用的邮箱不一样&…

Axure动态面板的使用

一. 动态面板 Axure动态面板是Axure RP软件中的一个功能模块&#xff0c;用于创建交互式原型和模拟应用程序的动态效果。它可以模拟用户在应用程序中的操作流程&#xff0c;并展示不同状态之间的变化&#xff0c;提供更真实的用户体验。通过创建不同的状态和添加交互效果&…