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