4

J'ai un projet de rouille où j'inclus la dépendance mysql -crate et je veux l'avoir indépendamment.Cargo.toml OS Dépendance pour Crate

donc j'ai essayé: Cargo.toml

[package] 
name = "test" 
version = "0.1.0" 
authors = ["daMaex"] 

[dependencies] 
ws = "*" 
clap = "*" 
env_logger = "*" 

[target.'cfg(any(unix, macos))'.dependencies.mysql] 
version = "*" 
default-features = false 
features = ["socket"] 

[target.'cfg(windows)'.dependencies.mysql] 
version = "*" 
default-features = false 
features = ["pipe"] 

[features] 
default = [] 
ssl = [] 

L'erreur se produit déjà avec un minimum principal: src/main.rs

fn main() { 
} 

Mais la génération échoue. Sur macos/unix il veut toujours compiler le tuyau et obtenir est une importation non résolue:

error[E0432]: unresolved import `std::os::windows::io::RawHandle` 
    --> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/named_pipe-0.2.2/src/lib.rs:38:5 
    | 
    |  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Could not find `windows` in `std::os` 

et la même chose se produit sur Windows pour la caisse mysql lui-même:

error[E0432]: unresolved import `std::os::unix` 
    --> C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\mysql-7.1.2\src\io.rs:24:5 
    | 
24 | use std::os::unix as unix; 
    |  ^^^^^^^^^^^^^^^^^^^^^ no `unix` in `std::os` 

Donc ma question est, comment faire je gère la dépendance de l'OS dans ce cas?

+0

Je voudrais regarder dans [compilation conditionnelle] (http://rustbyexample.com/attribute/cfg.html); Vous aurez probablement besoin de deux versions de chaque fonction/module dépendant de la plateforme. Bien qu'il soit difficile de dire quelle méthode vous conviendrait le mieux, puisque vous n'avez pas fourni de code, je suggèrerais probablement d'utiliser cet attribut dans une fonction et d'ajouter vos déclarations 'use' * dans la fonction *. – Aurora0001

+0

@ Aurora0001 Je n'utilise pas la dépendance à l'os dans mon propre code, la caisse mysql en dépend. –

+0

Oh, je vois ce que tu veux dire. J'ai jeté un oeil aux autres caisses qui utilisent 'mysql' pour voir si elles le gèrent comme vous, et il semble qu'aucun d'entre eux n'utilise des conditions dans leur' Cargo.toml', donc je ne sais pas ce qui causerait cela. Peut-être que ça vaudrait la peine de demander sur GitHub si vous n'obtenez aucune réponse ici? – Aurora0001

Répondre