Cargo: *未*启用功能时的可选依赖项。

创建于 2015-07-27  ·  3评论  ·  资料来源: rust-lang/cargo

一些库可以在性能下降的稳定 Rust 上运行(例如,不使用NonZero )或有限的功能(某些 API 被禁用)。 新兴的做法似乎是具有unstablenightly Cargo 功能,使用户能够在可用时选择使用不稳定的 Rust 功能。

我正在发布rust-rc作为std::rc::Weak还不稳定的解决方法。 目前,似乎没有办法在默认情况下将此板条箱作为依赖项,但在启用unstable功能时_not_。 这可以添加到 Cargo 吗?

请注意,反转默认值并具有stable功能只会将问题转移到可以/应该仅用于不稳定 Rust 的依赖项上。

A-features

最有用的评论

使用[target.'cfg(...)'.dependencies]语法,这可以通过允许cfg(feature = "...")像在 Rust 代码中那样的行为来支持:

[target.'cfg(not(feature = "std"))'.dependencies]
hashmap_core = "0.1.2"

目前,这样的部分被视为启用 _regardless_ 功能状态,老实说,这对我来说似乎是一个错误。

所有3条评论

我也想要这个。 在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 ,我希望我的库与稳定版兼容。

当前行为是错误还是有意为之?

此页面是否有帮助?
0 / 5 - 0 等级