Crates

El atributo crate_type puede usarse para decirle al compilador si un crate es un ejecutable o una biblioteca (e incluso qué tipo de biblioteca), y el atributo crate_name se puede usar para establecer el nombre del crate.

Sin embargo, es importante tener en cuenta que los atributos crate_type y crate_name no tienen ningún efecto en absoluto cuando se usa Cargo, el administrador de paquetes de Rust. Dado que Cargo se usa para la mayoría de los proyectos de Rust, esto significa que los usos en el mundo real de crate_type y crate_name son relativamente limitados.

// Este crate es una biblioteca
#![crate_type = "lib"]
// La biblioteca se llama "rary"
#![crate_name = "rary"]

pub fn funcion_publica() {
    println!("`funcion_publica()` de rary llamada");
}

fn funcion_privada() {
    println!("`funcion_privada()` de rary llamada");
}

pub fn acceso_indirecto() {
    print!("`acceso_indirecto()` de rary llamado, \n> ");

    funcion_privada();
}

Cuando se usa el atributo crate_type, ya no necesitamos pasar la bandera --crate-type a rustc.

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