zoukankan      html  css  js  c++  java
  • Rust-Cargo是什么

      Cargo是Rust的构建系统和包管理器。大多数Rustacean们使用Cargo来管理他们的Rust项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。(我们把代码所需要的库叫做依赖 dependencies)。(学习)

    基本结构

      当我们使用Intellij创建一个新项目,名字是HelloWorld,项目结构如下:

     Cargo.toml和Cargo.lock文件总是位于项目根目录下。

    源代码位于src目录下;

    默认的库入口文件是src/lib.rs;

    默认的可执行程序入口文件是src/main.rs;

    其它可选的可执行文件位于src/bin/*.rs(这里每一个rs文件均对应一个可执行文件);

    外部测试源代码文件们于tests目录下;

    外部测试源代码文件位于tests目录下;

    Cargo.toml和Cargo.lock

      Cargo.toml和Cargo.lock是cargo项目代码管理的核心两个文件,cargo工具的所有活动均基于这两个文件。

      Cargo.toml是cargo特有的项目数据描述文件,对于开发人员而言,Cargo.toml文件存储了项目的所有信息,它直接面向开发人员,开发人员如果想让自已的rust项目能够按期望的方式进行构建、测试和运行,那么必顺按照合理的方式构建Cargo.toml。

      以下是Cargo.toml的内容

    [package]
    name = "HelloWorld"
    version = "0.1.0"
    authors = ["johnnyzhao <minj2me@gmail.com>"]
    edition = "2018"
    
    # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    
    [dependencies]

    [[test]]
    name = "test1"
    path = "tests/test1.rs"

       而Cargo.lock文件,开发人员不需要直接去修改这个文件。lock文件是cargo工具根据同一项目的toml文件生成的项目依赖详细清单文件,所以我们一般不用修改他,只需要对着Cargo.toml文件进行开发就好了。

    [package]段落描述了软件开发者对本项目的各种元数据描述信息,name字段定义了项目的名称,version字段定义了项目的当前版本,authors字段定义了该项目的所有者(作者),当然,[package]段落不仅仅包含这些字段,更详细的可选字希详见Cargo参数配置

      以下是Cargo.lock的内容

    # This file is automatically @generated by Cargo.
    # It is not intended for manual editing.
    [[package]]
    name = "HelloWorld"
    version = "0.1.0"

    定义项目依赖

      使用cargo工具的最大优势就在于能够对该项目的各种依赖项进行方便、统一和灵活的管理。这也是使用cargo对rust的项目进行管理的重要目标之一。在cargo的toml文件描述中 ,主要通过各种依赖段落来描述该项目的各种依赖项。toml中常用的依赖段落包括以下几种:

    • 基于rust官方仓库crates.io,通过版本说明来描述
    • 基于项目源代码的git仓库地址,通过url来描述
    • 基于本地项目的绝对路经或者相对路经,通过类Unix模式的路经来描述

    如:

    [dependencies]
    typemap = "0.3"
    plugin = "0.2*"
    hammer = { version = "0.5.0"}
    color = { git = "https://github.com/bjz/color-rs" }
    geometry = { path = "crates/geometry" } 

    2-4行,为方法一的写法;

    第5行,为方法二的写法;

    第6行,为方法三的写法;

    这三种写法各有用处,如果项目需要使用crates.io官方仓库来管理项目依赖项,推荐使用第一种方法。如果项目开发者更倾向于使用git仓库中最新的源码,可以使用方法二。方法二也经常用于当官方仓库的依赖项编译不通过时的备选方案。方法三主要用于源代码位于本地的依赖项。

    定义集成测试用例

      cargo另一个重要的功能,即将软件开发过程中必要且非常重要的测试环节进行集成,并通过代码属性声明或者toml文件描述来对测试进行管理。其中,单元测试主要通过在项目代码的测试代码部分前用 #[test] 属性来描述,而集成测试,则一般都会通过toml文件中的[[test]]段落进行描述。例如,假设集成测试文件均位于tests文件夹下,toml可以写成这样:

    [[test]]
    name = "test1"
    path = "tests/test1.rs"

      name字段定义了集成测试的名称,path字段定义了集成测试文件相对于本toml文件的路经。看看,定义集成测试就是如此简单。但需要注意的是:

    • 如果没有在Cargo.toml里定义集成测试的入口,那么tests目录(不包括子目录)下的每个rs文件被当作集成测试入口。
    • 如果在Cargo.toml里定义了集成测试入口,那么定义的那些rs就是入口,不再默认指定任何集成测试入口。
  • 相关阅读:
    Android 上传图片到服务器 okhttp一
    Kotlin 扩展——省略findViewById
    音频的播放一
    layui+ztree 树状下拉框
    Element里el-badge在el-tab里视图不被渲染问题
    linux之cat 操作
    cmd命令行中查看、修改、删除与添加环境变量
    cmd 文件/文件夹的一切操作
    操作
    11. 判断是给属性前加typeof 可以同时判断属性是否存在
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/14435462.html
Copyright © 2011-2022 走看看