Eu gostaria de fazer um projeto com a daemon
e a client
, conectando através de um soquete unix.
A client
e a daemon
requerem dois binários, então como posso dizer Cargo
para construir dois destinos de duas fontes diferentes?
Para adicionar um pouco de fantasia, gostaria de ter um library
para a parte principal do daemon
e apenas um binário para envolvê-lo e comunicar-se por meio de soquetes.
Portanto, temos este tipo de arquitetura de árvore:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
Eu poderia fazer um executável que gerencie ambas as questões, mas não é o que eu quero fazer, a menos que seja uma prática muito boa.
rust
rust-cargo
RallionRl
fonte
fonte
Respostas:
Você pode especificar vários binários usando
[[bin]]
, conforme mencionado aqui :[[bin]] name = "daemon" path = "src/daemon/bin/main.rs" [[bin]] name = "client" path = "src/client/bin/main.rs"
Dica: Se, em vez disso, você colocar esses arquivos em
src/bin/daemon.rs
esrc/bin/client.rs
, obterá dois executáveis chamadosdaemon
e,client
pois o Cargo compila todos os arquivos emsrc/bin
executáveis com o mesmo nome automaticamente. Você precisa especificar nomes e caminhos como no trecho acima apenas se você não seguir esta convenção.fonte
target/debug/$name
onde$name
está oname
especificado em Cargo.toml.cargo install
comando. Tente ler a saída decargo help install
.Outra maneira é usar o recurso de espaço de trabalho . Isso fornecerá mais flexibilidade devido ao fato de que podemos ter mais de uma biblioteca. Exemplo de estrutura de projeto:
Conteúdo da raiz
Cargo.toml
:[workspace] members = ["cli", "core", "daemon", "gui", "rpc"]
fonte
[[bin]]
. Você poderia dar mais detalhes sobre o que você fez para fazer isso funcionar? Eu estava recebendo o seguinte erro:use ::engine::RuleEngine;
could not find engine in {{root}}
Outro formato poderia ser replicar o que o código-fonte Crates.io fez, se você tiver um projeto enorme, algo como:
Biblioteca principal em src, com uma pasta Bin com seus executáveis. Em seguida, faça chamadas para a caixa da biblioteca principal a partir de seus executáveis.
Dessa forma, sua biblioteca é centralizada de forma mais fácil de encontrar as coisas enquanto é armazenada em cache.
fonte