前言:我相当确定这应该是一件容易理解的事情,但我没有任何运气。我实际上一直在与货运经理奋斗,我一直希望它像C
中的简单include
声明,但它当然没有那么简单。如果您对如何更好地构建此项目有所建议,请分享。使用Cargo在顶部制作较低等级的包装箱
可以说,我有一个图书馆在鲁斯与货物管理。箱子被称为point
,目录看起来像这样。
point/
├── Cargo.lock
├── Cargo.toml
├── src
└── lib.rs
该箱子没有依赖性。
现在,我已经建立了另一个库,将使用这个point
箱。这个库被称为sat
这个库看起来是这样的:
sat/
├── Cargo.lock
├── Cargo.toml
├── src
├── circle.rs
├── lib.rs
├── point/
└── polygon.rs
注意point/
是上面提到的点目录。我之所以包括point
作为一个单独的库,而不是作为内sat
一个模块,就是circle
和polygon
模块都依赖于point
(我不能想出一个办法让point
在sat
作为一个模块工作不重复代码,这与问题并不真正相关,但与惯用的Rust库结构相关,所以请随时对更好的方式进行评论)。
这里是Cargo.toml
文件sat/
$ cat sat/Cargo.toml
[package]
name = "sat"
version = "0.1.0"
[dependencies]
point = { path = "src/point" }
现在,这一切都很好。但是,让我们说我想创建一个使用sat
作为外部箱子的应用程序。 如何在此应用程序中访问point
库,而无需包含point
库本身?
下面是一个示例,point
库中有一个名为Point
的结构体。 sat
库中有一个名为Circle
的结构体。比方说,我的示例源代码如下所示:
$ cat src/main.rs
extern crate sat;
// I don't want to have to include the point crate because it is already
// included in sat
// extern crate point;
fn main() {
// declare a polygon
// structure is: crate::module::struct::staticFunction
let polygon = sat::polygon::Polygon::new(<parameters>);
// I cannot declare a Point, because point is not a module in sat
// this errors out.
// However, this is the sort of thing that I would like to do.
let point = sat::point::Point::new(<parameters>);
}