Cargo: `--no-default-features` n'est pas appliqué aux dépendances

Créé le 11 août 2015  ·  3Commentaires  ·  Source: rust-lang/cargo

Imaginez que je travaille sur MyCrate , qui dépend de crate A , qui a une fonctionnalité par défaut X .
Si je compile MyCrate avec --no-default-features , la caisse A est toujours construite avec la fonctionnalité X activée.

C'est ennuyeux, mais il est possible de contourner en utilisant un Cargo.toml comme :

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

Cependant, cette solution ne fonctionne pas lorsque A dépend d'une autre caisse B qui a ses propres fonctionnalités par défaut. Dans ce cas, il ne semble pas possible de désactiver les fonctionnalités par défaut de B . En d'autres termes, il semble impossible de désactiver les fonctionnalités par défaut d'une dépendance indirecte.

Mon cas de motivation particulier est que libc dépend inutilement de libstd lorsqu'il est utilisé via cargo .

Commentaire le plus utile

@alexcrichton :
Donc, chaque caisse est-elle censée inclure [dependencies.*] default-features = false juste pour qu'un utilisateur final puisse choisir de désactiver certaines fonctionnalités imbriquées ? Cela semble plutôt obtus.

Tous les 3 commentaires

C'est pourquoi Cargo vous permet de réexporter les fonctionnalités des dépendances dans la caisse principale elle-même. Les dépendances sont destinées à être un détail d'implémentation privé au lieu d'une interface publique, et si vous souhaitez que la fonctionnalité soit exportée, vous devez explicitement vous y inscrire.

@alexcrichton :
Donc, chaque caisse est-elle censée inclure [dependencies.*] default-features = false juste pour qu'un utilisateur final puisse choisir de désactiver certaines fonctionnalités imbriquées ? Cela semble plutôt obtus.

Ouais, c'est l'intention. Faire de quelque chose une fonctionnalité default signifie qu'elle sera activée presque tout le temps, donc elle n'est pas nécessairement destinée à toutes les fonctionnalités optionnelles.

Cette page vous a été utile?
0 / 5 - 0 notes