我正在使用
$ cargo --version
cargo 0.21.0-beta (7e00b82d9 2017-07-17)
Run Code Online (Sandbox Code Playgroud)
我创建了一个简单的项目cargo new --bin test1,然后我添加了一个依赖项:
[dependencies]
lazy_static = "0.2.2"
Run Code Online (Sandbox Code Playgroud)
到Cargo.toml(根据这个版本存在)和
#[macro_use]
extern crate lazy_static;
Run Code Online (Sandbox Code Playgroud)
至 src/main.rs
当我跑cargo build:
$ cargo build
Compiling lazy_static v0.2.8
Compiling test1 v0.1.0 (file:///tmp/test1)
warning: unused `#[macro_use]` import
--> src/main.rs:1:1
|
1 | #[macro_use]
| ^^^^^^^^^^^^
|
= note: #[warn(unused_imports)] on by default
Finished dev [unoptimized + debuginfo] target(s) in 0.49 secs
Run Code Online (Sandbox Code Playgroud)
为什么cargo build编译最后一个版本0.2.8而不是0.2.2我指定的版本?我究竟做错了什么?
E_n*_*ate 11
精确版本前缀=.这是"不平等"版本要求之一.
lazy_static = "= 0.2.2"
Run Code Online (Sandbox Code Playgroud)
默认值是插入符号要求(例如0.2.2,相当于^0.2.2),它接受次要版本和补丁版本更新(如果是主要版本,则只接受补丁更新0).除非你有充分的理由不允许这样做,否则通常建议保留默认说明符.
阅读文档通常是个好主意.在这种情况下,Cargo文档有一个关于指定依赖关系的完整部分:
由于此字符串中没有任何运算符,因此它的解释方式与我们指定的方式相同
"^0.1.12",称为插入符号要求.插入要求允许SemVer兼容更新指定版本.如果新版本号不修改major,minor,patch分组中最左边的非零数字,则允许更新.
以及
不等式要求允许手动指定要依赖的版本范围或确切版本.
以下是不平等要求的一些示例:
Run Code Online (Sandbox Code Playgroud)= 1.2.3
我究竟做错了什么?
我会说,在没有情有可原的情况下,试图指定一个确切的版本是错误的.通常没有什么理由强迫您的代码用户坚持使用较旧版本的包,并防止他们修复错误.
Cargo.lock是避免使用一组不一致的依赖项部署应用程序的正确工具.