2015-04-24 12 views
11

Piszę bibliotekę wieloplatformową, która ma zależne od platformy zależności, jedną dla platform typu unix i jedną dla systemu Windows. Te skrzynie kompilują się tylko na konkretnych platformach, dlatego nie mogę po prostu dodać ich wszystkich w zależnościach.Jak uzyskać różne zależności w zależności od rodziny OS

W rzeczywistych kodach rdzy używam atrybutów cfg, takich jak #[cfg(unix)] do kompilowania pewnych kodów dla niektórych platform, i chcę zrobić coś podobnego w Cargo.toml lub w skrypcie kompilacji dla zależności. Obecnie używam takich trojanów docelowych:

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

Lista ta jednak nie jest wyczerpująca. Nie dbam o architekturę ani ABI, tylko o rodzinę OS i jako taka lista byłaby bardzo długa, gdybym pasowała do każdego pojedynczego potrójnego celu podobnego do tego, jaki jest.

Czy istnieje sposób korzystania z określonych zależności, określonych tylko przez rodzinę OS platformy ładunek jest uruchamiany? Coś takiego:

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

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

można zmienić przyjętą odpowiedź poniżej? autor aktualnie zaakceptowanej odpowiedzi również zgadza się z tą odpowiedzią: – hansaplast

Odpowiedz

10

ile przeczytałem docs here, to powinna teraz działać:

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

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

Tak, to prawda teraz. Moja odpowiedź jest bardzo stara, a teraz niedokładna. –

0

Obecnie nie ma sposobu, aby to zrobić. Na pewno byłoby miło.

+0

Ta odpowiedź jest już nieaktualna. Proszę zobaczyć odpowiedź ** @ Andrew Straw **. – Toothbrush