Me gustaría hacer un proyecto con a daemony a client, conectando a través de un socket unix.
A clienty a daemonrequieren dos binarios, entonces, ¿cómo puedo saber si hay Cargoque construir dos objetivos a partir de dos fuentes diferentes?
Para agregar un poco de fantasía, me gustaría tener un librarypara 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.rsysrc/bin/client.rs, obtendrá dos ejecutables con el nombredaemonyclientmientras Cargo compila todos los archivos ensrc/binejecutables 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/$namedonde$namees lanameque se especifica en Cargo.toml.cargo installcomando. 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