最近复习鸽了几天,今天继续学,希望在考试之前搞定这个官方文档 もうダメ。。。。
本章学习Cargo和Crates.io相关,内容有下:
自定义构建
向crates.io提交libraries
利用工作空间Workspace组织大型工程
从crates.io下载二进制库
用自定义命令拓展Cargo
自定义构建
基础
虽然构建方法已经预定义了,但是也可以自定义
Cargo使用两个profile,一个是dev(用在单纯build指令中),一个是release(用在cargo build --release中)。两者都可以通过在Cargo.toml中添加[profile.*]标签自定义:
[profile.dev]
opt-level = 0[profile.release]
opt-level = 3
[profile.release]
opt-level = 1 //Override!
这里的opt-level指编译器的优化等级,数值为0-3,数值越高优化越多编译更迟缓运行更高效。
向Crates.io提交Crate
通过三斜杠添加文件注释
通过文件注释让别人明白该如何使用它,生成HTML文档,支持Markdown格式
///#Example
///```
///let arg = 5;
///```
cargo doc 生成这个HTML文档
cargo doc --open 在浏览器中打开你可能需要的文档
文件注释通常包括使用例、引发的错误/Panics与安全性(是否为unsafe)。可根据具体情况添加。
//考完试了,继续摸
你也可以通过 cargo test 来运行注释中的代码块,这些代码将作为测试运行,用来确定例子与源码的更新是否同步。
通过
//! ....//! ....
来完成对整个Crate的总括注释。要注意这些注释一般写进src/lib.rs,在打开doc时直接显示。
通过pub use完善公共API
可以方便用户的使用,不用抽丝剥茧地调用类方法。
使用方法就是在需要使用的方法名前面加上 pub use self::...
举例:
pub use self::kinds::PrimaryColor;
pub mod kinds {
pub fn PrimaryColor(){...}
}
调用时无第一句:
use art::kinds::PrimaryColor;
有
ust art::PrimaryColor;
真正提交自己的Crates:
首先要申请一个账号
注意的是要在 crates.io/me/ 更改API密钥并通过 $ cargo login [pwd] 登录
编辑详细信息(元数据)
文件:Cargo.toml
代码:
[package]
name= "Whatever_u_like" //先到先得
version = "0.1.0"authors= ["Your Name "]
edition= "2020"description= "*#>>"license= "?" //许可证
[dependencies]
最后 $cargo publish 提交。同样可以通过这个指令更新。
你可以yank一个版本来阻止用户继续使用它,无论是出于版本老旧还是严重漏洞,但是由于代码实际上不会被删除,要是想删除还是用reset。通过undo来撤销。
$cargo yank --vers 1.0.1$cargo yank--vers 1.0.1 --undo
使用Workspaces
不同的相关packages组成workspaces
新建一个文件夹,在里面添加文件Cargo.toml:
[workspace]
members=["adder",
]
然后build,就会得到名为adder的子文件夹,这是新建的package,具有完整的基本结构。同时会新建一个target文件夹,里面是所有源代码的编译后文件。
├── Cargo.lock├── Cargo.toml
├── adder
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── target
通过修改Cargo.toml和运行Cargo new来在工作空间里面创建新的Librarty Crate,不过要用--lib参数:
cargo new add-one --lib
添加依赖
比如你要在相同的工作区域里将add-one添加为adder的依赖,由于Cargo不默认工作区间的各crate互相依赖,因此要手动在adder的Cargo.toml里添加:
[dependencies]
add-one = { path = "../add-one" }
要想添加外部依赖,就要在相应的文件夹里添加Cargo.toml的依赖,最后在父文件夹的Cargo.lock保存相关信息。这样做是保证各个Crate用的是相同版本的外部依赖,但是这个依赖只能在被声明的区间里使用。添加方法:
[dependencies]
rand= "0.5.5"
同样你可以添加一个测试,方法没有什么特别的地方。
怎么下载别人的cargo
按官方文档的说法,目前还只能安装有Binary Target的包:
Binary Target:源码可编译为可执行程序
Library Target:自己不能单独运行,可以和其他crate结合。
两个target可以共存的!
下载到那里去了? $PATH/bin 而且它会提示你的
怎么用?自然地把它当成cargo的指令参数就行了,这些包会成为你有用的工具。
后记
几乎时隔一个月才再次开始Rust的学习,由于自己基础不牢,再看这些不喾天书。可能之后的进一步学习要待写一些代码暖暖手,并掌握相关知识后再行展开吧!感觉现在要是再进行下去的话恐怕自己都不知道自己在说些什么了。。。