Cargoでcfg
を使用してソースコードを条件付きでコンパイルしたいのですが、しばらくグーグルした後、解決策はcargo --features
を使用することであるようです。
http://doc.crates.io/manifest.html
いくつか追加してみました
#[cfg(feature = "foo")]
ソースコードと
cargo build --features foo
、しかしそれは言う
Package `xxx v0.0.1 (file:///C:/yyy/xxx)` does not have these features: `foo`
貨物に機能を識別させるにはどうすればよいですか? Cargo.toml
に何かを追加する必要がありますか?
使用しているrustc
とcargo
のバージョンは次のとおりです。
C:\>rustc --version
rustc 0.13.0-nightly (42deaa5e4 2014-12-16 17:51:23 +0000)
C:\>cargo --version
cargo 0.0.1-pre-nightly (5af754d 2014-12-18 01:50:48 +0000)
_Cargo.toml
_に既存の機能を導入する必要があります。
次のようにして、条件付きでコンパイルすることができました。
_Cargo.toml
_で、features
セクションを作成し、特定の機能名を導入します。
_[features]
customfeature = [] # feature has no explicit dependencies
_
機能に特定の依存関係を持たせたい場合は、 ドキュメントの例 を確認してください。
コードでは、#[cfg(feature="customfeature")]
を使用します
_cargo build --features customfeature
_を実行します
手順2と3は問題ないように思われるため、_Cargo.toml
_に問題がある可能性があります。
他の回答で述べられているように、これにはfeatures
を使用できます。この機能を使用すると、コードの一部を条件付きでコンパイルできるだけでなく、そのコードの一部である可能性のある依存関係を条件付きで含めることができることを追加したいと思います。次のスニペットを検討してください。
他の回答ですでに説明されているように、機能フラグを使用して条件付きコードをアクティブ化できます。
cargo build --features customfeature
customfeature
が有効になっている場合にのみ、条件コードが存在するようにマークする必要があります。
#[cfg(feature = "customfeature")]
fn my_func() {
my_optional_dependency::do_something();
}
// This includes dependencies only when customfeature is enabled
#[cfg(feature = "customfeature")]
extern crate my_optional_dependency;
....
#[cfg(feature = "customfeature")]
use my_optional_dependency::*;
....
きみの Cargo.toml
次のセクションが必要です。
[dependencies.my_optional_dependency]
version = "1.2.3"
optional = true
[features]
customfeature = ["my_optional_dependency"]
これにより、機能が有効になっている場合にのみ、コードの特定の部分とその依存関係をアクティブ化できます。