2016-09-27 2 views
1

Учитывая эту небольшую библиотеку, которая использует локальные ящики в подкаталогах, как я могу сделать одну из зависимых зависимыми, в зависимости от того, включена ли функция?Как сделать локальную зависимость зависимости от функции в Cargo?

[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 включена.

+1

Для этого вы можете проверить [документацию] (http://doc.crates.io/manifest.html#the-features-section). – squiguy

+0

Я прочитал эту страницу, но не видел примеров этого. – ideasman42

+0

Это под комментарием ** # Список всех необязательных зависимостей **. – Shepmaster

ответ

4

Это можно сделать, добавив следующее:

[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 

Использование клеть может быть необязательным.

.: например

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

зависимости отмечен как необязательную двойную как особенности. Однако, если вам нужна функция с другим именем, вам нужно будет define it manually.

Например, если вы отметите зависимость image_load_png как необязательную, то image_load_png будет скомпилирован только в том случае, если включена функция image_load_png. Вы можете проверить, включена ли функция в коде Rust точно так же, как и любая другая функция.

[dependencies.image_load_png] 
path = "png" 
optional = true 
Смежные вопросы