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, see cargo -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(二)

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

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

相关文章

Web前端开发 小实训(三) 商品秒杀小练习

学生能够在本次实训中完成商品秒杀页面的基本逻辑 任务要求 能够实现某一个商品的秒杀&#xff0c;在倒计时结束后不再进行秒杀。 操作步骤 1、打开预设好的页面 <html><head><meta charset"utf-8"><title>秒杀</title><link …

2024.5.10

TCP服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口大小和窗口大小固定this->resize(727,879);this->setFixedSize(727,879);//创建…

MySQL——变量的浮点数问题处理

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常&#xff0c;会有很多00000的提示set resultdxdy; select result; 查询结果

Kafka分级存储概念(一)

Kafka分级存储及实现原理 概述 Kafka社区在3.6版本引入了一个十分重要的特性: 分级存储,本系列文章主要旨在介绍Kafka分级存储的设计理念、设计细节以及具体的代码实现 背景:为什么要有分级存储? 场景 作为一款具有高吞吐及高性能的消息中间件,Kafka被广泛应用在大数据、…

如何使用jmeter进行接口测试?jmeter接口测试流程是怎样的

前言 我们学习自动化测试都会用到不同的工具&#xff0c;那么今天笔者呢&#xff0c;想给大家聊聊Jmeter接口测试流程详解&#xff0c;废话不多说直接进入正题。 一、jmeter简介 Jmeter是由Apache公司开发的java开源项目&#xff0c;所以想要使用它必须基于java环境才可以&am…

让GPT们成为我们的小助手:使用ChatGPT来生成测试用数据

让GPT们成为我们的小助手 任务&#xff1a;帮忙生成测试数据 今天本来想做一个测试&#xff0c;所以需要一些测试数据。为了让测试显得更真实&#xff0c;所以希望测试数据看上去就是一份真实的数据&#xff0c;所以我就希望ChatGPT&#xff08;这里是代指&#xff0c;我有使…

太阳能无人机的多元化应用

随着新能源技术的不断发展和成熟&#xff0c;太阳能在无人机的应用技术已经成熟。太阳能无人机得到了量产和广泛的应用。传统无人机相比&#xff0c;太阳能无人机无需燃油&#xff0c;运行费用低廉&#xff0c;搭载多种高科技设备&#xff0c;能够高效、多元化地采集和分析各类…

UG NX二次开发(C#)-获取Part中对象创建时的序号(*)

文章目录 1、前言2、UG NX的对象序号讲解3、采用UG NX二次开发或者建模序号4、注意事项1、前言 在UG NX中,我们创建任意一个对象,都会在模型历史中添加一个创建对象的编号,即是对象序号,这个是递增的,当删除中间产生的对象时,其序号会重新按照建模顺序重新排布。今天一个…

宝塔面板如何删除一个站点

我们一般的网站都是PHPMySQL开发的&#xff0c;所以删除站点&#xff0c;就要先删数据库&#xff0c;再删网站目录 注意&#xff1a;一点要确保无用的再删 删除站点目录

布局全球内容生态,酷开科技Coolita AIOS以硬核品质亮相

当前&#xff0c;全球产业链供应链格局持续重构&#xff0c;成为影响中国对外经济发展的重要因素。2024年4月15至5月5日&#xff0c;历史久、规模大、层次高&#xff0c;作为中国外贸风向标的第135届中国进出口商品交易会&#xff08;即广交会&#xff09;在美丽的广州隆重举行…

CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文件包含 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;文件包含解题方法1:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7355b3c124dfe8cdf1c95e6991553.png#pic_ce…

Linux 麒麟系统安装

国产麒麟系统官网地址&#xff1a; https://www.openkylin.top/downloads/ 下载该镜像后&#xff0c;使用VMware部署一个虚拟机&#xff1a; 完成虚拟机创建。点击&#xff1a;“开启此虚拟机” 选择“试用试用开放麒麟而不安装&#xff08;T&#xff09;”&#xff0c;进入op…

uniapp生成二维码(uQRCode)与自定义绘制样式与内容

二维码生成使用了一款基于Javascript环境开发的插件 uQRCode &#xff0c;它不仅适用于uniapp&#xff0c;也适用于所有Javascript运行环境的前端应用和Node.js。 uQRCode 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id1287 目录 1、npm安装 2、通过import引…

从零开始的软件测试学习之旅(六)测试网络基础知识

测试网络基础知识 HTTP和HTMLURLDNS客户端和服务器请求方法和状态码面试高频Fiddler抓包工具教学弱网 HTTP和HTML 概念 html: HyperText Markup Language 超文本标记语言 http: HyperText Transfer Protocol 超文本传输协议 超文本: 图片, 音频, 视频 关系:http 可以对 html 的…

C++对象的拷贝构造函数

如果一个构造函数的第一个参数是类本身的引用,且没有其它参数(或者其它的参数都有默认值),则该构造函数为拷贝构造函数。 拷贝(复制)构造函数:利用同类对象构造一个新的对象 ●1.函数名和类同名 (构造函数) ●2.没有返回值 (构造函数) ●3.第一个参数必…

Linux基础之git与调试工具gdb

目录 一、git的简单介绍和使用方法 1.1 git的介绍 1.2 git的使用方法 1.2.1 三板斧之git add 1.2.2 三板斧之git commit 1.2.3 三板斧之git push 二、gdb的介绍和一些基本使用方法 2.1 背景介绍 2.2 基本的使用方法 一、git的简单介绍和使用方法 1.1 git的介绍 Git是一…

Kubernetes——基础认识

一、简介 1.Kubernetes是什么 Kubernetes 是一个全新的基于容器技术的分布式架构解决方案&#xff0c;是 Google 开源的一个容器集群管理系统&#xff0c;Kubernetes 简称 K8S。 Kubernetes 是一个一站式的完备的分布式系统开发和支撑平台&#xff0c;更是一个开放平台&#x…

249 基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法

基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法。最小熵反褶积(MED)&#xff0c;最优最小熵反卷积调整卷积 (OMEDA),多点最优最小熵解卷积调整&#xff08;Multipoint Optimal Minimum Entropy Deconvolution Adjusted&#xff0c;MOMEDA&#xff09;&#xff0c;最大相关峭…

el-select选项框内容过长

利用popper-class实现选项框内容过长&#xff0c;截取显示功能&#xff1a; <el-select popper-class"popper-class" :popper-append-to-body"false" v-model"value" placeholder"请选择"><el-optionv-for"item in opt…

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中&#xff0c;经常会出现设置关卡&#xff0c;这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下&#xff0c; let settings [ { level: 1, // 第1关 score: 0,…