Cargo: `--no-default-features` não é aplicado a dependências

Criado em 11 ago. 2015  ·  3Comentários  ·  Fonte: rust-lang/cargo

Imagine que estou trabalhando em MyCrate , que depende de crate A , que tem um recurso padrão X .
Se eu compilar MyCrate com --no-default-features , a grade A ainda será construída com o recurso X habilitado.

Isso é irritante, mas é possível contornar usando um Cargo.toml como:

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

No entanto, esta solução não funciona quando A depende de outra caixa B que possui seus próprios recursos padrão. Neste caso, não parece possível desabilitar os recursos padrão do B . Em outras palavras, parece impossível desabilitar os recursos padrão de uma dependência indireta.

Meu caso motivador particular é que libc depende desnecessariamente de libstd quando usado por meio de carga .

Comentários muito úteis

@alexcrichton :
Então, cada caixa deve incluir [dependencies.*] default-features = false apenas para que um usuário final possa optar por não receber algum recurso aninhado? Isso parece bastante obtuso.

Todos 3 comentários

É por isso que o Cargo permite reexportar recursos de dependências na própria caixa principal. As dependências destinam-se a ser um detalhe de implementação privada em vez de uma interface pública e, se você quiser que o recurso seja exportado, deverá optar explicitamente por fazê-lo.

@alexcrichton :
Então, cada caixa deve incluir [dependencies.*] default-features = false apenas para que um usuário final possa optar por não receber algum recurso aninhado? Isso parece bastante obtuso.

Sim, essa é a intenção. Tornar algo um recurso default significa que ele será ativado quase o tempo todo, portanto, não é necessariamente destinado a todas as funcionalidades opcionais.

Esta página foi útil?
0 / 5 - 0 avaliações