cargo如何管理依赖版本?



我是在rust书里的猜谜游戏教程上读到这篇文章的


确保可再生的构建与货物。锁文件

Cargo有一种机制,可以确保每次您或其他人构建代码时都可以重新构建相同的工件:Cargo将只使用您指定的依赖项的版本,除非您另有指示。例如,假设下周rand crate的0.8.4版本发布,该版本包含一个重要的错误修复,但它也包含一个将破坏您的代码的回归。为了处理这个问题,Rust创建了Cargo。第一次运行cargo build时锁定文件,所以我们现在在guessing_game目录中有这个文件。

当您第一次构建一个项目时,Cargo计算出符合标准的依赖项的所有版本,然后将它们写入Cargo。锁文件。在将来构建项目时,Cargo将看到锁定文件是否存在,并使用其中指定的版本,而不是再次执行所有找出版本的工作。这使您可以自动获得可复制的构建。换句话说,在您显式升级之前,您的项目将保持在0.8.3,这要感谢Cargo。锁定文件。


,但不太理解cargo如何保证我们拥有/需要依赖项的正确版本。例如,如果我们输入[dependencies] rand="0.8.3"它不会完全下载这个版本的crate,但是这个crate符合我们程序的需要,但是它与这个版本兼容(?)

请澄清这一逻辑!

当在Cargo.toml中指定crate时,您可以给出一个确切的版本(例如=0.8.3)或更一般的指示(例如0.8.*)。

如果在Cargo.toml中指定rand = "=0.8.3",则cargo将采用0.8.3版本(注意版本需求中额外的=)。但是如果您指定了rand = "*",那么在您第一次构建crate时,它将采用最新版本并将此版本写入Cargo.lock。这样,如果你重建你的板条箱以后货物将重用相同的版本,即使一个新的版本已经发布在板条箱。

请注意,指定rand = "0.8.3"并不意味着表示"完全是0.8.3版本",而是表示"任何版本>=0.8.3和<0.9": link"。

最新更新