【问题标题】:How to make a local dependency depend on a feature in Cargo?如何使本地依赖依赖于 Cargo 中的功能?
【发布时间】:2017-02-05 17:37:54
【问题描述】:

鉴于这个在子目录中使用本地 crate 的小型库,我如何使依赖项之一成为可选,具体取决于是否启用了一项功能?

[package]
name = "image_load"
description = "Small wrapper for image reading API's."
version = "0.1.0"

[features]

default = ["use_png"]

[dependencies]

[dependencies.image_load_ppm]
path = "ppm"

# How to make this build _only_ when 'use_png' feature is enabled?
[dependencies.image_load_png]
path = "png"

当我阅读the documentation 时,这显示了如何拥有可选的外部 依赖项。在上面的示例中,我使用了一个本地子目录,我想构建或不构建它 - 基于一个功能。

如何让image_load_png 仅在启用use_png 功能时构建。

【问题讨论】:

  • 您可以查看documentation。
  • 我读过这个页面,但没有看到这个例子。
  • 在注释下#所有可选依赖的列表.
  • @Shepmaster,是的,我读过这个。不同之处在于我的依赖是本地的,而不是可选的外部 crate,语法上的差异让我感到震惊。更新了问题以明确这一点。

标签: dependencies rust rust-cargo


【解决方案1】:

这可以通过添加以下内容来完成:

[package]
name = "image_load"
version = "0.1.0"
description = "Small wrapper for image reading API's."

[features]

default = ["use_png"]
use_png = ["image_load_png"]  # <-- new line

[dependencies]

[dependencies.image_load_ppm]
path = "ppm"

[dependencies.image_load_png]
path = "png"
optional = true  # <-- new line

使用 crate 可以是可选的。

例如:

#[cfg(feature = "use_png")]  // <-- new line
extern crate image_load_png;

【讨论】:

    【解决方案2】:

    标记为可选的依赖项兼作功能。但是,如果您想要使用不同名称的功能,则必须define it manually。

    例如,如果您将依赖项 image_load_png 标记为可选,则仅在启用 image_load_png 功能时才会编译 image_load_png。您可以像测试任何其他功能一样测试在 Rust 代码中启用的功能。

    [dependencies.image_load_png]
    path = "png"
    optional = true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 2015-04-09
      • 2017-02-22
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多