我也想要这个。 在midir 中,有多个后端(Linux 上的 ALSA 和/或 JACK,OSX 上的 CoreMIDI 和/或 JACK,Windows 上的 WinMM),我的计划是有一个jack
功能标志,它启用 JACK 并禁用其他(本地)一个。 我还想在编译 JACK 的情况下删除对 ALSA/CoreMIDI 的依赖,因此如果系统上未安装 ALSA,它甚至可以使用。
我的第一个想法是上面要求的内容,即如果选择了jack
功能,则简单地禁用alsa-sys
依赖项。
另一种方法是使用默认功能(例如native
),如果启用jack
则可以禁用该功能,然后为该功能提供特定于平台的依赖项(即alsa-sys
在 Linux 上,CoreMIDI 在 OSX 上),使用类似[target.x86_64-unknown-linux-gnu.features]
。 目前似乎也不可能拥有特定于目标平台的默认功能集,这也可以解决问题。
到目前为止,我无法找到一种无需在依赖包中定义依赖于平台的依赖项/功能的解决方法,但我可能忽略了一些东西。
使用[target.'cfg(...)'.dependencies]
语法,这可以通过允许cfg(feature = "...")
像在 Rust 代码中那样的行为来支持:
[target.'cfg(not(feature = "std"))'.dependencies]
hashmap_core = "0.1.2"
目前,这样的部分被视为启用 _regardless_ 功能状态,老实说,这对我来说似乎是一个错误。
对我来说同样的情况:
[target.'cfg(not(feature = "std"))'.dependencies]
heapless = "0.2.7"
[features]
default = ["std"]
std = []
如果未启用功能std
我只想要heapless
依赖项。
heapless
仅适用于每晚,但如果启用std
,我希望我的库与稳定版兼容。
当前行为是错误还是有意为之?
最有用的评论
使用
[target.'cfg(...)'.dependencies]
语法,这可以通过允许cfg(feature = "...")
像在 Rust 代码中那样的行为来支持:目前,这样的部分被视为启用 _regardless_ 功能状态,老实说,这对我来说似乎是一个错误。