Cargo: `--no-default-features` no se aplica a las dependencias

Creado en 11 ago. 2015  ·  3Comentarios  ·  Fuente: rust-lang/cargo

Imagine que estoy trabajando en MyCrate , que depende de la caja A , que tiene una función predeterminada X .
Si compilo MyCrate con --no-default-features , la caja A aún se crea con la característica X habilitada.

Esto es molesto, pero es posible solucionarlo usando un Cargo.toml como:

[dependencies.A]
version = "*"
default-features = false

Sin embargo, esta solución no funciona cuando A depende de otra caja B que tiene sus propias funciones predeterminadas. En este caso, no parece posible deshabilitar las funciones predeterminadas B . En otras palabras, parece imposible deshabilitar las funciones predeterminadas de una dependencia indirecta.

Mi caso motivador particular es que libc depende innecesariamente de libstd cuando se usa a través de cargo .

Comentario más útil

@alexcrichton :
Entonces, ¿se supone que cada caja debe incluir [dependencies.*] default-features = false solo para que un usuario final pueda optar por no participar en alguna función anidada? Eso parece bastante obtuso.

Todos 3 comentarios

Esta es la razón por la que Cargo le permite volver a exportar características de las dependencias en la caja principal. Las dependencias están destinadas a ser un detalle de implementación privado en lugar de una interfaz pública, y si desea que la función se exporte, debe optar explícitamente por hacerlo.

@alexcrichton :
Entonces, ¿se supone que cada caja debe incluir [dependencies.*] default-features = false solo para que un usuario final pueda optar por no participar en alguna función anidada? Eso parece bastante obtuso.

Sí, esa es la intención. Hacer que algo sea una característica default significa que se activará casi todo el tiempo, por lo que no necesariamente está diseñado para todas las funciones opcionales.

¿Fue útil esta página
0 / 5 - 0 calificaciones