如何根据OS系列具有不同的依赖关系

时间:2015-04-24 18:28:24

标签: windows unix rust dependency-management rust-cargo

我正在编写一个跨平台的库,它具有特定于平台的依赖关系,一个用于类似unix的平台,另一个用于windows。这些包只能在特定平台上编译,因此我不能只在正依赖的平台下添加它们。

在实际的生锈代码中,我使用cfg属性,如#[cfg(unix)]来编译某些平台的某些代码,我想在Cargo.toml或构建脚本中做类似的事情,对于依赖。目前,我正在使用这样的目标三元组:

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

然而,这份清单并非详尽无遗。我不关心架构或ABI,只关心OS系列,因此,列表会变得很长,如果我匹配每个类似unix的目标三元组。

是否有任何方法可以使用特定的依赖关系,仅由运行的平台货物的OS系列确定?类似的东西:

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

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

3 个答案:

答案 0 :(得分:12)

据我阅读文档here,现在应该可以了:

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

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

答案 1 :(得分:1)

目前无法做到这一点。肯定会很好。

答案 2 :(得分:0)

# macos dependencies

[target.'cfg(target_os = "macos")'.dependencies]
dep1 = "*"
dep2 = "*"

# windows dependencies

[target.'cfg(target_os = "windows")'.dependencies]
dep3 = "*"
dep4 = "*"

# regular dependencies

[dependencies] 
dep5 = "*"
dep6 = "*"