एक रस्ट प्रोग्राम अपने कार्गो पैकेज से मेटाडेटा तक कैसे पहुंच सकता है?


150

पैकेज में रस्ट कोड से आप कार्गो पैकेज के मेटाडेटा (जैसे संस्करण) का उपयोग कैसे करते हैं? मेरे मामले में, मैं एक कमांड लाइन टूल का निर्माण कर रहा हूं जिसे मैं एक मानक --versionध्वज रखना चाहता हूं, और मैं पैकेज के संस्करण को पढ़ने के लिए कार्यान्वयन करना चाहूंगा, Cargo.tomlइसलिए मुझे इसे दो स्थानों पर बनाए रखने की आवश्यकता नहीं है। मैं कल्पना कर सकता हूं कि कोई अन्य कारण हो सकता है कि कोई व्यक्ति कार्यक्रम से कार्गो मेटाडेटा तक पहुंचना चाहे।

जवाबों:


220

कार्गो पर्यावरण मेटाबॉल के माध्यम से संकलक के लिए कुछ मेटाडेटा पास करता है, जिसकी एक सूची कार्गो प्रलेखन पृष्ठों में मिल सकती है ।

कंपाइलर का माहौल fill_envकार्गो के कोड से आबाद है । यह कोड पहले के संस्करणों से अधिक जटिल हो गया है, और चर की पूरी सूची अब इससे स्पष्ट नहीं है क्योंकि यह गतिशील हो सकता है। हालाँकि, कम से कम निम्नलिखित चर वहाँ सेट किए जाते हैं (डॉक्स में सूची से):

CARGO_MANIFEST_DIR
CARGO_PKG_AUTHORS
CARGO_PKG_DESCRIPTION
CARGO_PKG_HOMEPAGE
CARGO_PKG_NAME
CARGO_PKG_REPOSITORY
CARGO_PKG_VERSION
CARGO_PKG_VERSION_MAJOR
CARGO_PKG_VERSION_MINOR
CARGO_PKG_VERSION_PATCH
CARGO_PKG_VERSION_PRE

आप env!()मैक्रो का उपयोग करके पर्यावरण चर का उपयोग कर सकते हैं । अपने प्रोग्राम का वर्जन नंबर डालने के लिए आप यह कर सकते हैं:

const VERSION: &'static str = env!("CARGO_PKG_VERSION");

// ...

println!("MyProgram v{}", VERSION);

यदि आप चाहते हैं कि आपका कार्यक्रम बिना कार्गो के भी संकलित हो, तो आप उपयोग कर सकते हैं option_env!():

const VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION");

// ...

println!("MyProgram v{}", VERSION.unwrap_or("unknown"));

13

बनाया -crate सभी बॉयलरप्लेट बिना कार्गो के परिवेश का एक बहुत serializing के साथ मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.