Eu gostaria de criar um pacote Rust que contenha uma biblioteca reutilizável (onde a maior parte do programa é implementada) e também um executável que o utilize.
Supondo que não tenha confundido nenhuma semântica no sistema do módulo Rust, como deve ser meu Cargo.toml
arquivo?
rust
rust-cargo
Andrew Wagner
fonte
fonte
cargo build --verbose
, você os verá narustc
linha de comando.[[bin]]
é uma matriz de tabelas? Por que usar[[bin]]
e não[bin]
? Parece não haver documentação sobre isso.Você também pode colocar fontes binárias
src/bin
e o restante das fontessrc
. Você pode ver um exemplo no meu projeto . Você não precisa modificar o seuCargo.toml
, e cada arquivo de origem será compilado em um binário de mesmo nome.A configuração da outra resposta é substituída por:
Cargo.toml
src / lib.rs
src / bin / mybin.rs
E execute:
Além disso, você pode apenas criar um
src/main.rs
que será usado como executável padrão. Infelizmente, isso entra em conflito com ocargo doc
comando:fonte
extern crate example;
não é exigida a partir de ferrugem 2018, você pode escrever diretamenteuse example::really_complicated_code;
e usar a função sem nomear o escopoUma solução alternativa é realmente não tentar empilhar as duas coisas em um único pacote. Para projetos um pouco maiores com um executável amigável, achei muito bom usar um espaço de trabalho
Criamos um projeto binário que inclui uma biblioteca dentro dele:
Cargo.toml
Isso usa a
[workspace]
chave e depende da biblioteca:src / main.rs
mylibrary / src / lib.rs
E execute:
Existem dois grandes benefícios para esse esquema:
O binário agora pode usar dependências que se aplicam apenas a ele. Por exemplo, você pode incluir várias caixas para melhorar a experiência do usuário, como analisadores de linha de comando ou formatação de terminal. Nada disso "infectará" a biblioteca.
O espaço de trabalho evita construções redundantes de cada componente. Se rodarmos
cargo build
no diretóriomylibrary
ethe-binary
, a biblioteca não será construída nas duas vezes - será compartilhada entre os dois projetos.fonte
main.rs
, depois divido-o em módulos à medida que cresce, finalmente dividindo-osrc/bin
quando é um pouco maior, depois movendo-me para um espaço de trabalho quando começo a reutilizar fortemente a lógica principal.cargo test
parece ignorar testes de unidade em lib.rscargo test --all
Você pode colocar
lib.rs
emain.rs
na pasta de fontes juntos. Não há conflito e a carga construirá as duas coisas.Para resolver conflitos de documentação, adicione ao seu
Cargo.toml
:fonte