6.1 조건부 컴파일(Conditional Compilation)

6.1 조건부 컴파일(Conditional Compilation)

Haxe는 #if, #elseif, #else를 사용하고 컴파일러 플래그를 검사해 조건부 컴파일을 허용합니다.

정의: 컴파일러 플래그(Compiler Flag) — 컴파일러 플래그는 컴파일 과정에 영향을 줄 수 있는 설정 가능한 값입니다. 이런 플래그는 -D key=value 또는 -D key(값이 "1"로 기본 설정됨)로 명령줄을 호출해 설정할 수 있어요. 컴파일러는 또한 서로 다른 컴파일 단계 사이에 정보를 전달하기 위해 내부적으로 여러 플래그를 설정합니다.

이 예제는 조건부 컴파일의 사용을 보여줍니다:

class Main {
  public static function main() {
    #if !debug
    trace("ok");
    #elseif (debug_level > 3)
    trace(3);
    #else
    trace("debug level too low");
    #end
  }
}

플래그 없이 컴파일하면 main 메서드 본문에 trace("ok"); 줄만 남습니다. 다른 분기는 파일 파싱 중에 폐기됩니다. 이 다른 분기들은 여전히 유효한 Haxe 구문을 포함해야 하지만, 코드는 타입 검사되지 않아요.

#if#elseif 뒤의 조건은 다음 표현식을 허용합니다:

  • 어떤 식별자든 같은 이름의 컴파일러 플래그 값으로 치환됩니다. 명령줄의 -D some-flagsome-flagsome_flag 플래그를 모두 정의한다는 점에 주목하세요.
  • String, Int, Float 상수의 값은 직접 사용됩니다.
  • 불리언 연산자 &&(and), ||(or), !(not)는 기대대로 동작하지만, 전체 표현식은 완전히 괄호로 감싸져야 합니다.

출처: Conditional Compilation

본문

#if/#elseif/#else

#if 조건이 참이면 해당 분기만 컴파일하고 나머지 분기는 파일 파싱 중 폐기합니다. 폐기된 분기도 유효한 구문이어야 하지만 타입 검사는 되지 않습니다.

조건 표현식

조건은 식별자(플래그 값으로 치환), 문자열/숫자 상수, 그리고 완전히 괄호로 감싼 불리언 연산식(&&, ||, !)을 허용합니다.

플래그 설정

-D key=value 또는 -D key(기본값 "1")로 설정합니다. -D some-flagsome-flagsome_flag를 모두 정의해요.

더 알아보기