Cargo: `--no-default-features`は依存関係に適用されません

作成日 2015年08月11日  ·  3コメント  ·  ソース: rust-lang/cargo

MyCrateに取り組んでいると想像してください。これは、デフォルト機能Xを持つクレートAに依存しています。
--no-default-features $を使用して$ MyCrateをコンパイルした場合、クレートAは、機能Xを有効にしてビルドされたままです。

これは煩わしいですが、次のようなCargo.tomlを使用して回避することができます。

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

ただし、 Aが独自のデフォルト機能を持つ別のクレートB $に依存している場合、このソリューションは機能しません。 この場合、 Bのデフォルト機能を無効にすることはできないようです。 言い換えれば、間接的な依存関係のデフォルト機能を無効にすることは不可能のようです。

私の特定の動機付けのケースは、貨物を介して使用される場合、libcが不必要にlibstdに依存することです。

最も参考になるコメント

@alexcrichton
では、エンドユーザーがネストされた機能をオプトアウトすることを選択できるようにするために、すべてのクレートに[dependencies.*] default-features = falseが含まれることになっていますか? それはかなり鈍いようです。

全てのコメント3件

これが、Cargoでメインクレート自体の依存関係から機能を再エクスポートできる理由です。 依存関係は、パブリックインターフェイスではなく、プライベート実装の詳細を目的としています。機能をエクスポートする場合は、明示的にオプトインする必要があります。

@alexcrichton
では、エンドユーザーがネストされた機能をオプトアウトすることを選択できるようにするために、すべてのクレートに[dependencies.*] default-features = falseが含まれることになっていますか? それはかなり鈍いようです。

ええ、それが意図です。 default機能を作成すると、ほぼ常にオンになるため、必ずしもすべてのオプション機能を対象としているわけではありません。

このページは役に立ちましたか?
0 / 5 - 0 評価