โปรแกรม Rust สามารถเข้าถึงข้อมูลเมตาได้จากแพ็คเกจ Cargo ได้อย่างไร


150

คุณจะเข้าถึงข้อมูลเมตาของแพ็คเกจ Cargo (เช่นรุ่น) จากรหัส Rust ในแพ็คเกจได้อย่างไร ในกรณีของฉันฉันกำลังสร้างเครื่องมือบรรทัดคำสั่งที่ฉันต้องการให้มีการตั้งค่ามาตรฐาน--versionและฉันต้องการให้การใช้งานเพื่ออ่านเวอร์ชันของแพคเกจจากCargo.tomlดังนั้นฉันไม่จำเป็นต้องรักษาไว้ในที่สอง ฉันสามารถจินตนาการได้ว่ามีเหตุผลอื่นที่บางคนอาจต้องการเข้าถึงข้อมูลเมตาของ Cargo จากโปรแกรมเช่นกัน

คำตอบ:


220

การขนส่งสินค้าผ่านข้อมูลเมตาบางอย่างที่จะเรียบเรียงผ่านตัวแปรสภาพแวดล้อมรายการที่สามารถพบได้ในหน้าเอกสารการขนส่งสินค้า

สภาพแวดล้อมคอมไพเลอร์ถูกบรรจุโดยfill_envในรหัสของ Cargo รหัสนี้มีความซับซ้อนมากขึ้นตั้งแต่รุ่นก่อนหน้าและรายการตัวแปรทั้งหมดไม่ชัดเจนอีกต่อไปเพราะมันสามารถเป็นแบบไดนามิก อย่างไรก็ตามอย่างน้อยตัวแปรต่อไปนี้จะถูกตั้งค่าไว้ที่นั่น (จากรายการในเอกสาร):

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

อัตราการส่งข้อมูลภายในจะช่วยให้มีสภาพแวดล้อมการขนส่งสินค้าเป็นจำนวนมากโดยไม่ต้องใช้หม้อไอน้ำทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.