cfg
설정 조건 검사는 두 가지 다른 연산자를 통해 가능합니다:
cfg속성: 속성 위치에서의#[cfg(...)]cfg!매크로: 불리언 표현식에서의cfg!(...)
전자는 조건부 컴파일을 가능하게 하는 반면, 후자는 조건부로 true 또는 false 리터럴로 평가되어 런타임에 검사를 가능하게 합니다. 둘 다 동일한 인자 문법을 사용합니다.
cfg!는 #[cfg]와 달리 코드를 제거하지 않으며 오직 참 또는 거짓으로만 평가됩니다. 예를 들어 cfg!가 조건으로 사용될 때, cfg!가 무엇으로 평가되든 상관없이 if/else 표현식의 모든 블록은 유효해야 합니다.
// 이 함수는 대상 OS가 리눅스인 경우에만 컴파일됩니다
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
println!("당신은 리눅스를 사용하고 있습니다!");
}
// 그리고 이 함수는 타겟 OS가 리눅스가 *아닌* 경우에만 컴파일됩니다.
#[cfg(not(target_os = "linux"))]
fn are_you_on_linux() {
println!("당신은 리눅스를 사용하고 있지 *않습니다*!");
}
fn main() {
are_you_on_linux();
println!("확실한가요?");
if cfg!(target_os = "linux") {
println!("네. 확실히 리눅스입니다!");
} else {
println!("네. 확실히 리눅스가 *아닙니다*!");
}
}