2015-04-24 28 views
11

Sto scrivendo una libreria multipiattaforma che ha dipendenze specifiche della piattaforma, una per piattaforme unix-like e una per windows. Queste casse si compilano solo su piattaforme specifiche, quindi non posso semplicemente aggiungerle tutte sotto dipendenze normalmente.Come avere dipendenze diverse a seconda della famiglia OS

Nel codice di ruggine vero io uso cfg attributi, come #[cfg(unix)] per compilare certo codice per alcune piattaforme, e voglio fare qualcosa di simile nel Cargo.toml, o in uno script di build, per le dipendenze. Attualmente, sto usando triplette target come queste:

[target.i686-unknown-linux-gnu.dependencies.crate1] 
git = repo1 
[target.x86-unknown-linux-gnu.dependencies.crate1] 
git = repo1 
[target.x86_64-unknown-linux-gnu.dependencies.crate1] 
git = repo1 

[target.i686-pc-windows-gnu.dependencies] 
crate2 = "*" 
[target.x86-pc-windows-gnu.dependencies] 
crate2 = "*" 
[target.x86_64-pc-windows-gnu.dependencies] 
crate2 = "*" 

Tuttavia, questo elenco è tutt'altro che esaustivo. Non mi interessa l'architettura o l'ABI, solo la famiglia OS, e come tale, la lista diventerebbe molto lunga, dovevo corrispondere per ogni singola tripla di tipo unix-like.

Esiste un modo per utilizzare dipendenze specifiche, determinate solo dalla famiglia OS della piattaforma in cui viene eseguito il carico? Qualcosa di simile:

[target.family.unix.dependencies] 
abc-sys = "*" 
def = "*" 

[target.family.windows.dependencies] 
abc-win = "*" 
+0

si può cambiare la risposta accettata in basso? lo scrittore della risposta attualmente accettata accetta anche – hansaplast

risposta

10

Per quanto ho letto i documenti here, questo dovrebbe ora funzionare:

[target.'cfg(unix)'.dependencies] 
abc-sys = "*" 
def = "*" 

[target.'cfg(windows)'.dependencies] 
abc-win = "*" 
+2

Sì, questo è vero ora. La mia risposta è molto antica e ora imprecisa. –

0

Attualmente non c'è modo di farlo. Sarebbe bello, certo.

+0

Questa risposta è ora obsoleta. Si prega di vedere la risposta di ** @ Andrew Straw **. – Toothbrush