可以使用 crate_type 属性来告诉编译器一个包是二进制文件还是库(甚至是哪种类型的库),并且可以使用 crate_name 属性来设置包的名称。

但是,需要注意的是,当使用 Rust 包管理器 Cargo 时,crate_typecrate_name 属性都没有任何作用。 由于 Cargo 用于大多数 Rust 项目,这意味着 crate_typecrate_name 的实际用途相对有限。

// This crate is a library
#![crate_type = "lib"]
// The library is named "rary"
#![crate_name = "rary"]

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();
}

当使用 crate_type 属性时,我们不再需要将 --crate-type 标志传递给 rustc

$ rustc lib.rs
$ ls lib*
library.rlib