Cargo - 构建 rust项目、管理依赖包
文章目录
- 关于 Cargo
- 构建项目
- 创建工程
- 编译运行
- build
- clean
- 管理依赖
- 添加依赖
- update
- check
- 计时
- manual
rust 安装可参考:https://blog.csdn.net/lovechris00/article/details/124808034
关于 Cargo
- Cargo 官方文档 : https://doc.rust-lang.org/cargo/
- crates : https://crates.io
Cargo is the Rust package manager.
Cargo downloads your Rust package’s dependencies, compiles your packages, makes distributable packages, and uploads them to crates.io, the Rust community’s package registry.
构建项目
创建工程
cargo new world_hello
目录结构如下
$ tree
.
├── Cargo.toml
└── src└── main.rs1 directory, 2 files
Cargo.toml
为 Rust 的清单文件。其中包含了项目的元数据和依赖库。src/main.rs
为编写应用代码的地方。
编译运行
cargo run
Compiling world_hello v0.1.0 (/Users/user/Documents/code/scode1/rust/world_hello)Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.95sRunning `target/debug/world_hello`
Hello, world!
会产生编译文件
$ tree -L 3
.
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target├── CACHEDIR.TAG└── debug├── build├── deps├── examples├── incremental├── world_hello└── world_hello.d
运行 build/run 命令会创建一个新文件 Cargo.lock
,该文件记录了本地所用依赖库的精确版本。
build
使用 run 就会自动build,但有时候我们可以只使用 build
cargo build
- 会生成 debug 文件夹:
world_hello/target/debug
- 将 debug 文件夹删掉,再次 build 会产生新的 debug 文件夹;
- 如果原文件没修改,build 后,debug 的内容可能不会更新。
clean
cargo clean
debug 等文件夹会被删掉
$ cargo cleanRemoved 119 files, 11.4MiB total
$ tree
.
├── Cargo.lock
├── Cargo.toml
└── src└── main.rs1 directory, 3 files
管理依赖
创建项目会自动生成 Cargo.toml
文件
原始内容如下:
[package]
name = "world_hello"
version = "0.1.0"
edition = "2021"[dependencies]
添加依赖
在 Rust 中,我们通常把包称作crates
你可以在 crates 库搜索依赖:https://crates.io/crates/rand
这里以添加 rand 为例,添加在 [dependencies]
下方
...
[dependencies]
rand = "0.3.14"
再次 build
$ cargo buildUpdating crates.io indexDownloaded rand v0.3.23Downloaded rand v0.4.6Downloaded libc v0.2.154Downloaded 3 crates (831.0 KB) in 1.22sCompiling libc v0.2.154Compiling rand v0.4.6Compiling rand v0.3.23Compiling world_hello v0.1.0 (/Users/user/Documents/code/scode1/rust/world_hello)Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.11s
查看文件结构
多出了 rand 相关内容
$ tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target├── CACHEDIR.TAG└── debug├── build│ ├── libc-f94129358965b880│ │ ├── invoked.timestamp│ │ ├── out│ │ ├── output│ │ ├── root-output│ │ └── stderr│ └── libc-fc8c71922db79826│ ├── build-script-build│ ├── build_script_build-fc8c71922db79826│ └── build_script_build-fc8c71922db79826.d├── deps│ ├── libc-2cd8d736a65e3bdc.d│ ├── libc-2cd8d736a65e3bdc.libc.844209738d3bf612-cgu.0.rcgu.o│ ├── liblibc-2cd8d736a65e3bdc.rlib│ ├── liblibc-2cd8d736a65e3bdc.rmeta│ ├── librand-51e82a279537c372.rlib│ ├── librand-51e82a279537c372.rmeta│ ├── librand-76148f2644fb6b76.rlib│ ├── librand-76148f2644fb6b76.rmeta│ ├── rand-51e82a279537c372.d│ ├── ...│ ├── rand-76148f2644fb6b76.rand.46a886c6f1f6cb04-cgu.4.rcgu.o│ ├── world_hello-7dfffed2f60728f0│ ├── ...│ └── world_hello-ffc760ff065d95f4.rvrclgiszz772pw.rcgu.o├── examples├── incremental│ ├── world_hello-2gr5fivx8ev9t│ │ ├── s-gvxy0ymbb9-azi538-5zea3fzl7hz9mcsbpmuo9lnu2│ │ │ ├── 2ao7q67wh7pwb6v2.o│ │ │ ├── ...│ │ │ └── work-products.bin│ │ └── s-gvxy0ymbb9-azi538.lock│ └── world_hello-32qpckyi3s6et│ ├── s-gvxxyb5ewl-1g1nr9k-5ewriqusvpjsrgth3731ddhf3│ │ ├── 2jcl4b6uedw0auwo.o│ │ ├── ...│ │ ├── rvrclgiszz772pw.o│ │ └── work-products.bin│ └── s-gvxxyb5ewl-1g1nr9k.lock├── world_hello└── world_hello.d14 directories, 65 files
update
更新所有依赖
cargo update
更新指定库
cargo update -p rand
check
查看对目录进行了哪些更改
修改内容 按 倒序排序
运行 check 之前,cargo clean
清理目录
$ cargo checkChecking libc v0.2.154Checking rand v0.4.6Checking rand v0.3.23Checking world_hello v0.1.0 (/Users/user/Documents/code/scode1/rust/world_hello)Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.94s
计时
查看编译时间
time cargo build
manual
cargo help
Rust’s package manager
Usage: cargo [+toolchain] [OPTIONS] [COMMAND]
cargo [+toolchain] [OPTIONS] -Zscript <MANIFEST_RS> [ARGS]…
Options:
-V
,--version
, Print version info and exit-list
, List installed commands-explain <CODE
, Provide a detailed explanation of a rustc error message
-v
,--verbose...
, Use verbose output (-vv very verbose/build.rs output)-q
,--quiet
, Do not print cargo log messages-color <WHEN
, Coloring: auto, always, never
-C <DIRECTORY
, Change to DIRECTORY before doing anything
,
, (nightly-only)-frozen
, Require Cargo.lock and cache are up to date-locked
, Require Cargo.lock is up to date-offline
, Run without accessing the network-config <KEY=VALUE
, Override a configuration value
-Z <FLAG>
, Unstable (nightly-only) flags to Cargo, seecargo -Z help
for details-h
,--help
, Print help
Commands:
- build, b : Compile the current package
- check, c : Analyze the current package and report errors, but don’t build object files
- clean: Remove the target directory
- doc, d, Build this package’s and its dependencies’ documentation
- new, : Create a new cargo package
- init: Create a new cargo package in an existing directory
- add, : Add dependencies to a manifest file
- remove, Remove dependencies from a manifest file
- run, r, Run a binary or example of the local package
- test, t : Run the tests
- bench: Run the benchmarks
- update, Update dependencies listed in Cargo.lock
- search, Search registry for crates
- publish : Package and upload this package to the registry
- install : Install a Rust binary
- uninstall Uninstall a Rust binary
- … : See all commands with --list
See cargo help <command>
for more information on a specific command.
写完以上后,发现这个官方教程就挺好,参考:
<https://www.rust-lang.org/zh-CN/learn >
伊织 2024-05-07(二)
相关文章:

Cargo - 构建 rust项目、管理依赖包
文章目录 关于 Cargo构建项目创建工程编译运行buildclean 管理依赖添加依赖updatecheck计时 manual rust 安装可参考:https://blog.csdn.net/lovechris00/article/details/124808034 关于 Cargo Cargo 官方文档 : https://doc.rust-lang.org/cargo/crat…...

内网安全-代理Socks协议路由不出网后渗透通讯CS-MSF控制上线简单总结
我这里只记录原理,具体操作看文章后半段或者这篇文章内网渗透—代理Socks协议、路由不出网、后渗透通讯、CS-MSF控制上线_内网渗透 代理-CSDN博客 注意这里是解决后渗透通讯问题,之后怎么提权,控制后面再说 背景 只有win7有网,其…...

NSSCTF | [SWPUCTF 2021 新生赛]jicao
打开题目,发现高亮显示了一个 php 脚本 这是脚本的内容 <?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;…...

Redis 支持的 Java 客户端都有哪些?
Redis 是一种高性能的键值存储系统,它以其快速、灵活和可扩展的特性而闻名。在 Java 开发中,与 Redis 交互的方式通常是通过使用 Redis 的 Java 客户端。 这些客户端提供了访问 Redis 数据库的接口,使开发人员能够在 Java 应用程序中轻松地使…...

【JavaEE 初阶(四)】多线程进阶
❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多线程知识 目录 1.前言2.常见的锁策略2.1悲观锁vs乐观锁2.2轻量级锁vs重量级锁2.3自旋锁vs挂起锁2.4读写…...

ZOC8 for Mac v8.08.1激活版:卓越性能的SSH客户端
在远程连接和管理的世界中,ZOC8 for Mac以其卓越的性能和丰富的功能,成为了众多专业人士的首选SSH客户端。它支持SSH1、SSH2、Telnet、Rlogin、Serial等多种协议,让您轻松连接到远程服务器。ZOC8拥有简洁直观的界面和强大的功能设置ÿ…...
指针(4)有点难
指针(4) 来做个简单的回顾: 指针数组: 1.是数组 2.是存放指针的数组 char* arr1[5]; int*arr2[3]; 数组指针: 1 .是指针 2 .指向数组的指针 字符指针:char*pc; 整型指针:int*pi; int …...
初步了解json文件
来自wetab 的AI pro: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是它使用了类似于编程语言(特别是J…...
赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十)
上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(三十九)-CSDN博客 七十九、forward和redirect的区别? 在Java Web应用程序中,forward和redirect是两种不同的服务器端重定向机制,它…...

初步了解Kubernetes
目录 1. K8S概述 1.1 K8S是什么 1.2 作用 1.3 由来 1.4 含义 1.5 相关网站 2. 为什么要用K8S 3. K8S解决的问题 4. K8S的特性 5. Kubernetes集群架构与组件 6. 核心组件 6.1 Master组件 6.1.1 Kube-apiserver 6.1.2 Kube-controller-manager 6.1.3 kube-schedul…...
前端工程化的基本介绍
文章目录 一、概念二、前端工程化的细节模块化组件化规范化 一、概念 工程化,可以理解为使用一些方式,去改良提高行业中现有的步骤、设计、应用方式。前端工程化,就是指对前端进行一些流程的标准化,让开发变得更有效率࿰…...

linux上Redis安装使用
环境centOS8 redis是缓存数据库,主要是用于在内存中存储数据,内存的读写很快,加快系统读写数据库的速度 一、Linux 安装 Redis 1. 下载Redis 官网下载Downloads - Redis 历史版本Index of /releases/ 本文中安装的版本为:h…...

prometheus+grafana的安装与部署及优点
一、Prometheus 的优点 1、非常少的外部依赖,安装使用超简单; 2、已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等; 3、服务自动化发现; 4、直接集成到代码; 5、设计思想是按照分布式、微服…...

JWK和JWT 学习
JWK和JWT 介绍 JWK (JSON Web Key) 和 JWT (JSON Web Token) 是现代Web应用程序中用于安全通信的两个重要概念。它们都是基于JSON的,并且是OAuth 2.0和OpenID Connect等协议的核心组成部分。 官方文档 JWT官方网站 JWK和JWK Set的RFC文档 JWT的RFC文档 JWK (JS…...
Go 使用mqtt
1、创建一个文件夹,并且使用go modules go mod init <module_name> 其中<module_name>是你的模块名称,如下 go mod init example.com/myproject 2、安装mqtt扩展 go get github.com/eclipse/paho.mqtt.golang 3、开始写主程序 package ma…...
C++ primer plus习题及解析第十二章(类和动态内存分配)
题目:12.1 题: 对于下面的类声明: class Cow { private:char name[20];char* hobby;double weight; public:Cow();Cow(const char* nm, const char* ho, double wt);//有参构造Cow(const Cow& c);//拷贝构造函数~Cow();//析构函数Cow&…...
gdb调试功能描述
gdb调试功能描述 gdb 调试:只对可执行文件进行调用,无法直接用gdb调试.c文件 1.查找命令帮助: (gdb) help data (gdb) help call -l (list) 查看载入文件(默认为10行)…...

使用Simulink Test进行单元测试
本文摘要:主要介绍如何利用Simulink Test工具箱,对模型进行单元测试。内容包括,如何创建Test Harness模型,如何自动生成excel格式的测试用例模板来创建测试用例,如何手动填写excel格式的测试用例模板来手动创建测试用例…...
深度学习中超参数设置
1、batchsize 在训练深度学习模型时,batch size(批大小)和 epochs(迭代次数)之间的关系取决于您的数据集大小、模型复杂度、计算资源等因素。下面是一些一般性的指导原则: 较大的 Batch Size:通…...
Docker nsenter 命令使用
查看容器对应宿主机上面的pid,容器技术的实质是进程,并没有完整的操作系统,就相当于在主机上面fork了一个子进程,通过docker daemon去fork一个子进程,这个子进程是可以在主机上面看到其pid的。 $ docker inspect -f {…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
C#最佳实践:为何优先使用as或is而非强制转换
C#最佳实践:为何优先使用as或is而非强制转换 在 C# 的编程世界里,类型转换是我们经常会遇到的操作。就像在现实生活中,我们可能需要把不同形状的物品重新整理归类一样,在代码里,我们也常常需要将一个数据类型转换为另…...