Cargo 是 Rust 的构建系统和包管理工具,同时 Rustacean 们使用 Cargo 来管理它们的 Rust 项目。Cargo 负责三个工作:构建你的代码,下载你代码依赖的库并编译这
些库。我们把你代码需要的库叫做“依赖(dependencies)”因为你的代码依赖他们。
  官方安装包的话,Rust 自带 Cargo

Cargo安装

  rust官方安装包自带Cargo,在终端检查你是否安装了 Cargo:

cargo --version

Cargo工程创建

  1、创建工程目录(例如/home目录下创建)

mkdir  projects

  2、进入/home/projects目录,然后新建Cargo工程

cd /home/projects/
cargo new hello_world --bin

  这个命令传递了 --bin 参数因为我们的目标是直接创建一个可执行程序,而不是一个库。Cargo 为我们创建了两个文件和一个目录:一个 Cargo.toml  (该文件首字母C 必须大写,同时该文件必须与src放置于同级目录,否则运行报错) 和一个包含了 main.rs 文件的 src 目录。

关于Cargo.toml:确保 Cargo.toml 的 C 是大写的,否则 Cargo 不知道如何处理配置文件。这个文件使用TOML(Tom's Obvious, Minimal Language)格式。 TOML 类似于INI,不过有一些额外的改进之处,并且被用作 Cargo 的配置文件。

  3、编译(cargo build)

#cd hello_world/
#cargo build
Compiling hello_world v0.1.0 (/home/projects/hello_world)
Finished dev [unoptimized + debuginfo] target(s) in .43s

  4、运行(cargo run)

# cargo run
Finished dev [unoptimized + debuginfo] target(s) in .02s
Running `target/debug/hello_world`
Hello, world!

  5、发布构建(cargo build --release )

  你的项目准备好发布了,可以使用 cargo build --release 来优化编译项目。这些优化可以让 Rust 代码运行的更快,不过启用他们会让程序花更长的时间编译。这也是为何这是两种不同的配置,一个为了开发,另一个构建提供给用户的最终程序。

# cargo build --release
Finished release [optimized] target(s) in .01s
# ls
Cargo.lock Cargo.toml src target

  运行完成后发现会生成Cargo.lock 文件以及target目录,Cargo 用 Cargo.lock 文件跟踪你程序的依赖。这里是 Hello World 项目的 Cargo.lock 文件。这个项目并没有依赖,所以内容有一点稀少。事实上,你自己甚至都不需要碰这个文件;仅仅让 Cargo 处理它就行了。到了这一步,就已经成功使用 Cargo 构建了 hello_world 。

关于Cargo.toml配置内容将另外说明;

【rust】Rust 的构建系统和包管理工具Cargo认识并初步使用(2)的更多相关文章

  1. 打包一沓开源的 C/C++ 包管理工具送给你!

    本文作者:HelloGitHub-ChungZH 博客地址:https://chungzh.cn/ 包管理器可以帮助你更方便地安装依赖关系,并决定所安装的版本,提高你的开发幸福感.许多语言都有自己的包 ...

  2. debian系统包管理工具aptitude

    注意:aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具.与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些.举例来说,aptitu ...

  3. [Todo]各种语言包管理工具

    看到一篇文章不错: http://harttle.com/2015/05/29/pkg-manager.html 包管理和构建系统是现代的软件开发团队中必不可少的工具,也是Linux软件系统的常见组织 ...

  4. 主流包管理工具npm、yarn、cnpm、pnpm之间的区别与联系——原理篇

    接触 node 之后,一直使用npm包管理工具, cnpm 一开始会用一些,但是并没有觉得比 npm 快得多,使用 cnpm 的时候还经常安装不成功,只能再用 npm 安装一遍,渐渐的就弃用了 cnp ...

  5. buckaroo 去中心化的c++包管理工具

    buckaroo 是一款去中心化的c++ 包管理工具,使用上,类似yarn(nodejs),cargo (rust) ,使用buckaroo 我们可以很容易集成一个大规模的项目 支持以下特性 直接从G ...

  6. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  7. NodeJS包管理工具——npm入门

    如今每个语言体系中都有一个包管理工具,PHP的Composer,Ruby的gem,Python的pip,Java的Maven……当然还有Node.js的npm.有的人会奇怪为何要引入又一个新东西来让我 ...

  8. linux--软件包管理工具

    linux平台软件包管理: RPM/DPKG 两大阵营简介 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM ...

  9. python版本管理工具pyenv和包管理工具pipenv

    一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...

随机推荐

  1. 【MM系列】SAP 根据采购订单创建外向交货单的BAPI

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 根据采购订单创建外向交货单的 ...

  2. LeetCode.859-伙伴字符串(Buddy Strings)

    这是悦乐书的第330次更新,第354篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第200题(顺位题号是859).给定两个字母A和B的小写字母,当且仅当我们可以在A中交换 ...

  3. 第十届山东省acm省赛补题(2)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4124 L Median Time Limit: 1 Second      ...

  4. 【Qt开发】事件循环与线程 一

    事件循环与线程 一 初次读到这篇文章,译者感觉如沐春风,深刻体会到原文作者是花了很大功夫来写这篇文章的,文章深入浅出,相信仔细读完原文或下面译文的读者一定会有收获. 由于原文很长,原文作者的行文思路是 ...

  5. 【Qt开发】解决Qt5.7.0中文显示乱码的问题

    [Qt开发]解决Qt5.7.0中文显示乱码的问题 亲测可用: 乱码主要是编码格式的问题,这里可以通过Edit菜单中选择当前文档的编码方式,选择按照UTF-8格式保存,然后输入对应的中文,保存,然后运行 ...

  6. 20191114 Spring Boot官方文档学习(4.7)

    4.7.开发Web应用程序 Spring Boot非常适合于Web应用程序开发.您可以使用嵌入式Tomcat,Jetty,Undertow或Netty创建独立的HTTP服务器.大多数Web应用程序都使 ...

  7. Kibana开启中文语言

    Kibana在6.7以后的版本,支持了多种语言.并且自带在安装包里. 开启方式: 找到Kibana配置文件所在:config/kibana.yml找到配置:i18n.locale: "en& ...

  8. [知乎]自己真是Know Nothing 历史上有哪些细思恐极的事件?

    作者:敖让链接:https://www.zhihu.com/question/38374479/answer/652432284来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. C++ static、const和static const类型成员变量声明以及初始化

    C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. sta ...

  10. Java并发编程:锁的释放

    Java并发编程:锁的释放 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} Ja ...