2015-04-24 20 views
11

Ben platforma özel bağımlılıkları, Unix benzeri platformlar için bir tane ve pencereler için birine sahip bir çapraz platform kütüphanesi yazıyorum bağlı olarak farklı bağımlılıkları var. Sadece normalde hepsini altında bağımlılıkları ekleyemezsiniz niçin bu kasalar sadece belirli platformlarda derleme. Gerçek pas kodunda Nasıl OS ailesi

Belirli platformlar için belli bir kod derlemeye #[cfg(unix)] gibi cfg özelliklerini kullanıyorum ve bağımlılıkları için Cargo.toml benzer ya da bir yapı komut şey yapmak istiyorum. Şu anda, bu gibi hedef üçüz kullanıyorum:

[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 = "*" 

Ancak bu listenin kapsamlı uzaktır. Ben mimarlık veya ABI yalnızca işletim sistemi ailesi umurumda değil ve bu nedenle, liste çok uzun olsun Üçlü her Unix benzeri hedef için maç için yapılmış olmasıydı. Platform kargo OS ailesi tarafından sadece belirlenen

belirli bağımlılıkları kullanmak için herhangi bir yolu var mı

, üzerinde çalıştırılır? gibi bir şey: Orada

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

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

aşağıda kabul cevabını değiştirebilir? Şu anda kabul cevabın yazarı da Bu cevap artık kullanılmıyor – hansaplast

cevap

10

Bildiğim kadarıyla, bu artık çalışması gerekir:

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

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

Evet, bu artık doğrudur. Cevabım çok eski ve şimdi yanlış. –

0

anda bunu yapmak için bir yol yoktur. Kesinlikle iyi olurdu. Ben dokümanlar here okundu olarak

+0

kabul eder. Lütfen bkz. ** @ Andrew Straw ** 'nin yanıtı. – Toothbrush