2016-09-26 5 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 } 

लेकिन ऐसा लगता है कि मैं जो चाहता हूं वह ऐसा नहीं लगता है। मेरे मैक पर यह नीचे लक्ष्य रेखा का उपयोग कर रहा है जैसे कि मैंने अभी hyper = "0.9" निर्दिष्ट किया है। अगर मैं cargo build निर्दिष्ट के रूप में, मैं त्रुटियों openssl के संबंध में मिलता है:

माल: चेतावनी = #, शामिल <openssl/ssl.h>

लेकिन अगर मैं इसे इस तरह का निर्माण:

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

फिर यह ठीक बनाता है। यह मुझे इंगित करता है कि "मैकोज़" के लिए 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

@ शेमपस्टर सिद्धांत में अच्छी तरह से वे एक ही समस्या को हल करने की कोशिश कर रहे हैं, इसलिए मुझे लगता है कि मेरा सवाल यह है कि "मेरी कार्गो फ़ाइल निर्भरता के लिए सही कॉन्फ़िगरेशन का चयन क्यों नहीं कर रही है"। – 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

होमब्री के ओपनएसएसएल का उपयोग करके [यहां पर SO] (http://stackoverflow.com/q/34612395/155423) भी दस्तावेज किया गया है, लेकिन मुझे नहीं लगता कि यह ओपी की मदद करेगा। विशेष रूप से, मेरा मानना ​​है कि वे * मैकोज़ पर ओपनएसएसएल * का उपयोग करने से बचें, और इसके बजाय अंतर्निहित एसएसएल फ्रेमवर्क का उपयोग करें। – Shepmaster

+0

हां, यही कारण है कि मैंने कहा कि इस पल के लिए यह संभव नहीं था और बाकी एक कामकाज था। मेरे उपयोग के मामले के लिए, मैं फ्रेमवर्क के खिलाफ लिंक करने के लिए इसमें एक लाइन टिप्पणी/अपूर्ण करने के बजाय 'Cargo.toml' में मैन्युअल संशोधनों के बिना संकलित करने के लिए अपने क्रेट को पसंद करता हूं ...Bu टीआई सहमत है कि यह इष्टतम नहीं है और इस मुद्दे को हल नहीं करता है। –

संबंधित मुद्दे