Rust 의 cfg 속성을 이용한 조건부 컴파일

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 Rust 의 cfg 속성과 cfg! 매크로에 대해 배웁니다. 이들은 각각 구성에서 조건부 검사와 평가를 허용합니다. cfg 속성은 조건부 컴파일을 활성화하는 반면, cfg! 매크로는 런타임에 참 또는 거짓으로 평가됩니다. cfg!를 사용하는 코드 블록은 #[cfg]와 달리 평가 결과에 관계없이 유효해야 합니다. #[cfg]는 코드를 제거할 수 있기 때문입니다.

참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어 main.rs를 사용하고 rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.

cfg

구성 조건 검사는 두 가지 다른 연산자를 통해 가능합니다.

  • cfg 속성: 속성 위치의 #[cfg(...)]
  • cfg! 매크로: 부울 표현식의 cfg!(...)

전자는 조건부 컴파일을 활성화하는 반면, 후자는 런타임 검사를 허용하는 true 또는 false 리터럴로 조건부로 평가됩니다. 두 가지 모두 동일한 인수 구문을 사용합니다.

cfg!#[cfg]와 달리 코드를 제거하지 않고 오직 참 또는 거짓으로 평가됩니다. 예를 들어, cfg!가 조건으로 사용되는 경우 if/else 표현식의 모든 블록은 cfg!의 평가 결과와 관계없이 유효해야 합니다.

// 대상 OS 가 linux 인 경우에만 이 함수가 컴파일됩니다.
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
    println!("You are running linux!");
}

// 대상 OS 가 linux 가 *아닌* 경우에만 이 함수가 컴파일됩니다.
#[cfg(not(target_os = "linux"))]
fn are_you_on_linux() {
    println!("You are *not* running linux!");
}

fn main() {
    are_you_on_linux();

    println!("Are you sure?");
    if cfg!(target_os = "linux") {
        println!("Yes. It's definitely linux!");
    } else {
        println!("Yes. It's definitely *not* linux!");
    }
}

요약

축하합니다! Cfg 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.