
提示:建议学习完上一节内容再学习本章内容哦,详情请订阅本专栏。
文章目录
上一篇文章我们学习了Rust的Hello World,并对其进行了详细分析,相信你已经学习到了,本节我们将使用Cargo创建一个Hello World,并对其进行详细分析。
我们上次写的Hello World是最简单的程序,是没有依赖的。想想,如果你在开发大型的项目时,一定会引用到其他的库,或者管理一些文件,进行构建,这时候编译就成了个复杂的问题。Rust官方为我们提供了Cargo来管理这些项目,它可以做到上面提到的一切,使用Cargo进行管理将会使你开发变得更容易,我们以后的开发用到的就全是Cargo了。
Cargo 是 Rust 的构建系统和包管理器。大多数 Rustacean 们使用 Cargo 来管理他们的 Rust 项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。
Rustacean指的就是电脑面前学习的大佬啦。
首先需要检查你的电脑是否安装Cargo,当然,如果你正常安装的话那就必然已经安装上了。
cargo --version
如下返回,就代表安装没有问题,否则建议你重新安装Rust。

以下命令用来新建一个项目
cargo new hello_cargo
其中hello_cargo是新建项目的名字,运行后如下图就表示创建成功。

接下来进入刚才创建的项目目录,可以看到目录结构如下,
│ .gitignore
│ Cargo.toml
│
└─src
main.rs
cargo为我们默认创建了git仓库,因为git是一个常用的管理系统,除此以外,cargo还可以指定版本管理系统,使用 --vcs 参数指定或者切换版本管理系统,如果文件夹已经有了仓库了,那么默认就不会创建仓库了。
cargo new --vcs=git
--vcs的可选项为
| 可选项 |
|---|
| git, hg, pijul, fossil, none |
Cargo.toml文件使用的是TOML配置格式,在TOML格式中
[section] 称为一个片段标题项目的配置文件,可以用文本编辑器打开,其中内容如下
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
[dependencies]
[package]是管理当前项目包的信息的name 表明了项目名字是hello_cargoversion表明了项目版本号是0.1.0edition 表明了项目使用的Rust版本号[dependencies]是管理当前项目包的依赖信息的。在 Rust 中,代码包被称为 crates。这个项目并不需要其他的 crate,不过在后面的项目会用到依赖,那时会用得上这个片段。使用cargo运行程序和我们手动运行程序是不一样的,手动运行程序需要先编译,然后再运行,在cargo里面我们一步就可完成这个操作,cargo自动为我们管理了这个过程。
构建项目使用如下命令,
cargo build
运行后,编译成功如下图,

此时cargo就为我们编译好了项目,找到hello_cargo\target\debug目录就可以看到我们编译好的可执行文件,这个和我们在命令行执行文件是一样的

可执行程序运行也是和之前一样的

如果项目编译正常,会生成一个Cargo.lock文件,这个文件记录项目依赖的实际版本。你自己永远也不需要碰这个文件,让 Cargo 处理它就行了。
使用cargo来运行项目,使用以下命令
cargo run
运行效果与我们手动运行是一样的,run会自动执行编译和运行的步骤,我们上面已经编译了,因此这里运行时就不需要再次编译了,cargo就变得很智能。

再次修改后运行就会有一个编译的过程

Cargo还提供了一个代码检查的工具,该命令快速检查代码确保其可以编译,但并不产生可执行文件:
cargo check
当我们执行后,并没有报错,说明代码没有问题。

发布项目时,我们使用以下命令来优化编译项目,以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。
cargo build --release

最后你可以在target/release下找到最终的可执行文件。

我们回顾下已学习的 Cargo 内容:
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功