কোনও রুট প্রোগ্রাম কীভাবে তার কার্গো প্যাকেজ থেকে মেটাডেটা অ্যাক্সেস করতে পারে?


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"));

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.