一、crate Rust用了两个概念来管理项目:一个是crate,一个是mod。

crate简单理解就是一个项目。crate是Rust中的独立编译单元。每个crate可以编译成一个库或者可执行文件,可以通过rustc 的选项 --crate-type来指定,默认情况 下,rustc 将从crate产生二进制可执行文件。

官方有一个crate仓库https://crates.io/ ,可以供用户发布各种各样的库,用户也可以直接使用这里面的开源库。

mod简单理解就是命名空间。mod可以嵌套,还可以控制内部元素的可见性。

crate和mod的重要区别:

crate之间不能出现循环引用。mod可以循环引用,mod1可以引入mod2,同时mod2可以引入mod1。在Rust里面,crate才是一个完整的编译单元。也就是说,rustc编译器必须把整个crate的内容全部读进去才能执行编译,rustc不是基于单个的.rs文件或者mod来执行编译的。

二、库 2.1、使用cargo new rary --lib命令生成名字叫rary的项目,其类型是库。此时自动生成一个lib.rs的模板文件。

2.2、打开lib.rs文件,将模板内容代码替换成你自己的代码,以下是简单代码样例:

pub fn public_function() {

println!("called rary's `public_function()`");

}

fn private_function() {

println!("called rary's `private_function()`");

}

pub fn indirect_access() {

print!("called rary's `indirect_access()`, that\n> ");

private_function();

}

2.3、使用使用cargo build命令编译,默认情况下,库会使用crate文件的名字,前面加上 “lib” 前缀,查看target\debug目录下生成library.d和library.rlib文件,即rary前面加lib前缀名字的文件类型。

三、使用库 3.1、使用cargo new hellorust命令新建一个普通的可执行项目,默认生成main.rs的模板文件和Cargo.toml项目管理配置文件。

3.2、打开Cargo.toml项目管理配置文件,在依赖项[dependencies]下面添加对之前创建的rary库的引用:rary = { path = "../rary" },path = "../rary"是rary项目相对于hellorust项目的本地路径。 3.3、在main.rs中调用rary库中对应的方法。代码样例如下:

fn main() {

rary::public_function();

rary::indirect_access();

}

3.4、编译执行hellorust项目,成功调用rary库的对应方法,输出结果如下:

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: