Rust 프로그램이화물 패키지에서 메타 데이터에 어떻게 접근 할 수 있습니까?


150

패키지의 Rust 코드에서 Cargo 패키지의 메타 데이터 (예 : 버전)에 어떻게 액세스합니까? 필자의 경우 표준 --version플래그 를 갖고 싶은 명령 줄 도구를 작성 중이며 패키지 버전을 읽는 구현을 원 Cargo.toml하므로 두 곳에서 유지할 필요가 없습니다. 프로그램에서 카고 메타 데이터에 액세스하려는 다른 이유가 있다고 생각할 수 있습니다.

답변:


220

Cargo는 환경 변수를 통해 일부 메타 데이터를 컴파일러에 전달합니다.이 목록은 Cargo 문서 페이지 에서 찾을 수 있습니다 .

컴파일러 환경은 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.