Ответ 1
Насколько я читал docs здесь, теперь это должно работать:
[target.'cfg(unix)'.dependencies]
abc-sys = "*"
def = "*"
[target.'cfg(windows)'.dependencies]
abc-win = "*"
Я пишу кросс-платформенную библиотеку, которая имеет зависимые от платформы зависимости, одну для унифицированных платформ и одну для Windows. Эти ящики компилируются только на определенных платформах, поэтому я не могу просто просто добавить их под зависимостями.
В коде ржавчины я использую атрибуты cfg
, например #[cfg(unix)]
для компиляции определенного кода для определенных платформ, и я хочу сделать что-то подобное в Cargo.toml или в сборке script, для зависимостей. В настоящее время я использую целевые триплеты, подобные этим:
[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, только о семействе ОС, и, таким образом, список будет очень длинным, если бы я соответствовал каждой единственной тройке, подобной UNIX.
Можно ли использовать определенные зависимости, определяемые только семейством ОС платформы? Что-то вроде:
[target.family.unix.dependencies]
abc-sys = "*"
def = "*"
[target.family.windows.dependencies]
abc-win = "*"
Насколько я читал docs здесь, теперь это должно работать:
[target.'cfg(unix)'.dependencies]
abc-sys = "*"
def = "*"
[target.'cfg(windows)'.dependencies]
abc-win = "*"
В настоящее время нет способа сделать это. Было бы хорошо, конечно.
# 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 = "*"