Me gustaría hacer un proyecto con a daemon
y a client
, conectando a través de un socket unix.
A client
y a daemon
requieren dos binarios, entonces, ¿cómo puedo saber si hay Cargo
que construir dos objetivos a partir de dos fuentes diferentes?
Para agregar un poco de fantasía, me gustaría tener un library
para la parte principal del daemon
, y solo tener un binario para envolverlo y comunicarlo a través de sockets.
Entonces, tenemos este tipo de arquitectura de árbol:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
Podría hacer un ejecutable que maneje ambas preocupaciones, pero eso no es lo que quiero hacer, a menos que sea una muy buena práctica.
rust
rust-cargo
RallionRl
fuente
fuente
Respuestas:
Puede especificar varios binarios usando
[[bin]]
, como se menciona aquí :[[bin]] name = "daemon" path = "src/daemon/bin/main.rs" [[bin]] name = "client" path = "src/client/bin/main.rs"
Consejo: si en cambio coloca estos archivos en
src/bin/daemon.rs
ysrc/bin/client.rs
, obtendrá dos ejecutables con el nombredaemon
yclient
mientras Cargo compila todos los archivos ensrc/bin
ejecutables con el mismo nombre automáticamente. Debe especificar nombres y rutas como en el fragmento anterior solo si no sigue esta convención.fuente
target/debug/$name
donde$name
es laname
que se especifica en Cargo.toml.cargo install
comando. Intente leer el resultado decargo help install
.Otra forma es utilizar la función de espacio de trabajo . Esto proporcionará más flexibilidad debido al hecho de que podemos tener más de una biblioteca. Estructura de proyecto de ejemplo:
Contenido de la raíz
Cargo.toml
:[workspace] members = ["cli", "core", "daemon", "gui", "rpc"]
fuente
[[bin]]
. ¿Podría dar más detalles sobre lo que hizo para que esto funcione? Recibía el siguiente error:use ::engine::RuleEngine;
could not find engine in {{root}}
Otro formato podría ser replicar lo que ha hecho el código fuente de Crates.io , si tiene un proyecto masivo, algo como:
Biblioteca principal en src, con una carpeta Bin con sus ejecutables. Luego haga llamadas a la caja de su biblioteca principal desde sus ejecutables.
De esa manera, su biblioteca está centralizada para que sea más fácil encontrar cosas mientras está almacenada en caché.
fuente