Crates & Pacotes
Um pacote (projeto Cargo) contém um ou mais crates (unidades de compilação): biblioteca (lib.rs) e/ou binários (main.rs, bin/*.rs).
Receita
[package]
name = "myapp"
version = "0.1.0"
edition = "2024"
[lib]
name = "myapp"
path = "src/lib.rs"
[[bin]]
name = "cli"
path = "src/bin/cli.rs"Quando usar isso: Dividir a biblioteca reutilizável do binário CLI em um único repositório.
Exemplo de Trabalho
// src/lib.rs
pub fn core_logic() -> i32 { 42 }
// src/main.rs
fn main() {
println!("{}", myapp::core_logic());
}O que isso demonstra:
- O crate de biblioteca expõe
core_logic - O binário depende do crate de biblioteca no mesmo pacote
- O nome do pacote corresponde à biblioteca para
use myapp
Mergulho Profundo
cdylib/staticlib para FFI. autobins false para controlar bins. build.rs para scripts de compilação.
Armadilhas
- Crate apenas binário sem biblioteca - Difícil testar a lógica de integração. Correção: Extrair a biblioteca.
- Nome incorreto entre biblioteca e pacote - Confusão na importação. Correção: Alinhar nomes ou documentar.
- Múltiplos bins compartilham código - Duplicação nos
main. Correção: Módulo de biblioteca compartilhado. pubapenas no binário - Não reutilizável. Correção:lib.rs.- Incompatibilidade de edição de dependências - O resolvedor escolhe compatíveis.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Divisão de crates em Workspace | Limites claros | Ferramenta minúscula |
| Binário único | Script | Biblioteca reutilizável necessária |
Crate proc-macro | Macros derive | Código normal |
FAQs
crate vs pacote?
Pacote tem `Cargo.toml`; crate é artefato compilado.rlib dylib?
Tipos de crate para vinculação.tests crate?
tests/ de integração é um crate separado.bench?
criterion é frequentemente externo.examples/?
bins de exemplo no cargo.publish?
Geralmente um pacote por entrada no crates.io.caminho padrão da lib?
src/lib.rs.múltiplos main?
Tabela `[[bin]]`.no_std lib?
`#![no_std]` em `lib.rs`.doc?
`cargo doc --open`.Relacionados
Versões da Pilha: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.