Jump to Navigation

cargo的依赖处理

cargo的依赖处理,

三种依赖配置方式:

[dependencies]
depend-pkg-name="pkg-version or *"
depend-pkg-name={git = "git repo", rev = "bfabc843ef2"}
depend-pkg-name={path = "./helloutils"}   #支持绝对路径,相对路径。

一些释疑

在编译时,cargo首先从https://github.com/rust-lang/crates.io-index下载官方所有crate的索引列表。

crate索引crates.io-index大小达到31M,估计以后还会变得更大。

下载依赖包的过程是递归的。

索引列表放在什么位置呢?~/.cargo。

如何指定本地某一目录下的crate呢?$CARGO_HOME,设置该变量后,~/.cargo位置被覆盖了。

本地搜索一个crate的机制,从该项目目录开始,逐级向上查找带.cargo目录的位置。

上否支持多个$CARGO_HOME路径呢?

下载github网络受限怎么办呢?可在$HOME/.cargo/config文件中设置proxy。

如何手工模拟本地构建crates.io-index的过程?

编译的库怎么安装到系统目录呢?

库默认编译为.dylib,什么情况下编译为.so呢?使用lib>crate-type调整,rlib/dylib/staticlib/lib。

是否支持单工程,多目标编译呢?支持多个子项目Cargo.toml的方式。

对每个cargo项目,有默认库目标,默认可执行程序目标,其他可执行程序目标,示例可执行程序目标。

对库,Cargo.lock不提交git,对可执行程序,Cargo.lock提交git。

cargo对依赖包的编译,编译库缓存在target/debug/deps/xxx.rlib。

cargo 目录结构

projects/
 └── hello_world
    ├── Cargo.lock
    ├── Cargo.toml
    ├── main    // 之前用 rustc 生成的可执行文件
    ├── src
    │   └── main.rs
    └── target    // 执行 $ cargo build 命令后生成的文件夹
        ├── build
        ├── deps
        ├── examples
        ├── hello_world    // 和 main 一样的可执行文件
        └── native

其他

关于rust中的重载,

rust使用HM类型推导。

trait的duck typing使用量很大。

目前只能实现不同struct的方法重载,还无法实现同一struct的方法重载。

官方文档, http://doc.crates.io/guide.html http://doc.crates.io/config.html

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut