2016-09-26 10 views
9

私はカーゴファイルに依存していますが、それはプラットフォーム、特にデフォルトの機能によって異なる必要があります。ここに私がやろうとしていることがあります:カーゴでプラットフォーム固有の依存関係が優先されるのはなぜですか?

[package] 
name = "..blah.." 
version = "..blah.." 
authors = ["..blah.."] 

[target.'cfg(target_os = "macos")'.dependencies] 
hyper = { version = "0.9", default-features = false, features = ["security-framework"] } 

[target.'cfg(target_os = "linux")'.dependencies] 
hyper = { version = "0.9", default-features = true } 

しかし、これは私がしたいと思わないです。私のMacでは、ちょうどhyper = "0.9"を指定したかのように、下のターゲット行を使用しているようです。指定されたとおり、私は、私は、OpenSSLに関するエラーが出るcargo buildない場合:

は貨物:私はこのようにそれを構築する場合、警告=#は、<のopenssl/ssl.h >

しかし、次のとおりです

[dependencies] 
hyper = { version = "0.9", default-features = false, features = ["security-framework"] } 

次に、正常に構築されます。これは、 "macos"のcfgが機能していないことを示しています。

この作業を行うにはどうすればよいですか、具体的には、プラットフォームごとに異なる機能を使用する依存関係が必要な場合の解決方法を教えてください。

+1

なぜこれがhttp://stackoverflow.com/q/29854912/155423の重複ではないでしょうか? – Shepmaster

+0

上記の構文が[単体テスト](https://github.com/rust-lang/cargo/blob/master/tests/cfg.rs)のサンプルと一致するように見えるので、重複していないと思います。コミット](https://github.com/rust-lang/cargo/pull/2328/commits/f5d786e05600720ba4671caf5b598624103c8f72)。 – wimh

+2

@Shepmasterも理論的には同じ問題を解決しようとしているので、私の質問は「なぜ私のカーゴファイルが依存関係の正しい構成を選択していないのか」と考えています。 – vcsjones

答えて

0

夜通し錆1.13.0、貨物0.13.0のようには見えません。貨物の問題3195および1197を参照してください。回避策として

、あなたはtell Cargo to use Homebrew's OpenSSL次のことができます。

export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include 
export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib 
export DEP_OPENSSL_INCLUDE=`brew --prefix openssl`/include 
+0

HomebrewのOpenSSLを使用すると、[here on SO](http://stackoverflow.com/q/34612395/155423)にも記載されていますが、それがOPに役立つとは思いません。具体的には、macOSでOpenSSL *の使用を避け、組み込みのSSLフレームワークを代わりに使用したいと考えています。 – Shepmaster

+0

はい、私はそれが現時点では不可能であり、残りは回避策であると言いました。私のユースケースでは、フレームワークとリンクするためのコメント行をコメントにするのではなく、 'Cargo.toml'を手作業で修正することなくコンパイルすることをお勧めします...それは最適ではないと同意し、問題を解決しません。 –

関連する問題