7 컴파일러 사용법(Compiler Usage)

7 컴파일러 사용법(Compiler Usage)

기본 사용법(Basic Usage)

Haxe 컴파일러는 보통 두 질문에 답해야 하는 여러 인자와 함께 명령줄에서 호출됩니다:

  • 무엇을 컴파일해야 하는가?
  • 출력은 무엇이어야 하는가?

첫 번째 질문에 답하려면 보통 -p <path> 인자로 클래스 경로를, -m <dot_path> 인자로 컴파일할 메인 클래스를 제공하는 것이 충분해요. 그러면 Haxe 컴파일러는 메인 클래스 파일을 해석해 컴파일을 시작합니다.

두 번째 질문은 보통 원하는 대상을 지정하는 인자를 제공하는 것으로 귀결됩니다. 각 Haxe 대상은 전용 명령줄 스위치가 있는데, JavaScript용 --js <file_name>, PHP용 --php <directory> 등이 있어요. 대상의 성격에 따라 인자 값은 디렉터리 경로(--php, --cpp, --cs, --java의 경우)이거나 파일 이름입니다.

일반 인자(Common arguments)

입력(Input):

  • -p <path>(또는 --class-path <path>) — .hx 소스 파일이나 패키지(하위 디렉터리)가 들어있는 클래스 경로를 추가한다.
  • -L <library_name>(또는 --library <library_name>) — Haxelib 라이브러리를 추가한다. 기본적으로 로컬 Haxelib 저장소의 가장 최신 버전이 사용됩니다. 특정 버전을 요구하려면 -L library_name:version을 쓰고, git에서 버전을 요구하려면 -L library_name:git:https://github.com/user/project.git#commit을 쓰는데, 선택적 #commit은 브랜치, 태그 또는 커밋 해시일 수 있어요.
  • -m <dot_path>(또는 --main <dot_path>) — 메인 클래스를 설정한다.
  • -D <var[=value]>(또는 --define <var[=value]>) — 조건부 컴파일 플래그를 정의한다.

출력(Output):

  • --js <file_name.js> — 지정된 파일에 JavaScript 소스 코드를 생성한다.
  • --swf <file_name.swf>Flash .swf로 지정된 파일을 생성한다.
  • --neko <file_name.n>Neko 바이너리를 지정된 파일로 생성한다.
  • --php <directory>PHP 소스 코드를 지정된 디렉터리에 생성한다. PHP7 소스 코드에는 -D php7을 사용한다.
  • --cpp <directory>C++ 소스 코드를 지정된 디렉터리에 생성하고 네이티브 C++ 컴파일러로 컴파일한다.
  • --cs <directory>C# 소스 코드를 지정된 디렉터리에 생성하고 네이티브 C# 컴파일러로 컴파일한다.
  • --java <directory>Java 소스 코드를 지정된 디렉터리에 생성하고 Java 컴파일러로 컴파일한다. -D jvm을 추가하면 Java 컴파일 단계를 건너뛰고 JVM 바이트 코드를 직접 생성한다.
  • --jvm <file_name.jar>JVM 바이트코드를 jar 파일로 생성한다.
  • --python <file_name.py>Python 소스 코드를 지정된 파일에 생성한다.
  • --lua <file_name.lua>Lua 소스 코드를 지정된 파일에 생성한다.
  • --hl <file_name.hl>HashLink 바이트 코드를 지정된 파일에 생성한다.
  • --cppia <file_name.cppia> — 지정된 스크립트를 cppia 파일로 생성한다.
  • -x <file> — Neko 파일을 컴파일·실행하는 단축키.
  • --no-output — 파일을 생성하지 않고 컴파일한다.
  • --interp — 내부 매크로 시스템을 사용해 프로그램을 해석한다.

기타 전역 인자(Other global arguments)

  • --run <module> [args...] — 명령줄 인자로 Haxe 모듈을 컴파일·실행한다.
  • --xml <file> — XML 타입 설명을 생성한다. Dox 같은 API 문서 생성 도구에 유용하다.
  • --json <file> — JSON 타입 설명을 생성한다.
  • -v(또는 --verbose) — 상세 모드를 켭니다.
  • --dce <std|full|no>Dead Code Elimination 모드를 설정한다(기본 std).
  • --debug — 컴파일된 코드에 디버그 정보를 추가한다.
  • -r <file>[@name](또는 --resource <file>[@name]) — 명명된 리소스 파일을 추가한다.
  • --prompt — 오류 시 프롬프트.
  • --cmd <command> — 성공적인 컴파일 후 지정된 셸 명령을 실행한다.
  • --no-traces — 프로그램의 trace 호출을 컴파일하지 않는다.
  • --displayIDE와 편집기를 위한 완성 정보를 제공하는 코드 팁을 표시한다.
  • --times — 컴파일 시간을 측정한다.
  • --no-inline인라이닝을 비활성화한다.
  • --no-opt — 코드 최적화를 비활성화한다.
  • --remap <package:target> — 패키지를 다른 것으로 다시 매핑한다.
  • --macro — 다른 것보다 먼저 주어진 초기화 매크로(initialization macro)를 타이핑 전에 호출한다.
  • --wait <host:port> — 명령을 실행하기 위해 주어진 포트에서 기다린다(Completion server 참조).
  • --connect <host:port> — 주어진 포트에 연결해 명령을 실행한다(Completion server 참조).
  • -C <dir>(또는 --cwd <dir>) — 현재 작업 디렉터리를 설정한다.

대상별 인자(Target specific arguments)

  • -D php-front=<filename> — php 프론트 파일의 이름을 선택한다.
  • -D php-lib=<filename> — php lib 폴더의 이름을 선택한다.
  • -D php-prefix=<name> — 모든 클래스에 주어진 이름을 접두한다.
  • --swf-version <version> — SWF 버전을 변경한다.
  • --swf-header <header> — SWF 헤더를 정의한다(width:height:fps:color).
  • --swf-lib <file> — 컴파일된 SWF에 SWF 라이브러리를 추가한다.
  • --swf-lib-extern <file> — 타입 검사를 위해 SWF 라이브러리를 사용한다.
  • --flash-strict — 더 타입 엄격한 flash API.
  • --java-lib <file> — 외부 JAR 또는 클래스 디렉터리 라이브러리를 추가한다.
  • --net-lib <file>[@std] — 외부 .NET DLL 파일을 추가한다.
  • --net-std <file> — 루트 std .NET DLL 탐색 경로를 추가한다.
  • --c-arg <arg> — 네이티브 Java/C# 컴파일러에 옵션 arg를 전달한다.

추가 정보: 컴파일 후 명령 실행--cmd를 사용해 성공적인 컴파일 후 지정된 명령을 실행할 수 있어요. (테스트) 도구를 실행하거나 빌드를 직접 실행하는 데 사용할 수 있습니다. 예: --cmd java -jar bin/Main.jar(Java용), --cmd node main.js(Node.js용), --cmd neko Main.n(Neko용) 등.

전역 컴파일러 구성 매크로(Global compiler configuration macros)

단일 모듈을 포함하려면 그 경로를 명령줄이나 hxml에 직접 나열할 수 있어요: haxe ... ModuleName pack.ModuleName. 더 구체적인 포함/제외에는 다음 초기화 매크로를 사용합니다:

  • --macro include(pack:String, recursive=true, ?ignore:Array<String>, ?classPaths:Array<String>, strict=false) — 패키지 pack의 모든 모듈을 컴파일에 포함한다. recursive가 true면 컴파일러가 모든 하위 패키지를 재귀적으로 추가한다.
  • --macro exclude(pack:String, recursive=true) — 특정 클래스, enum, 또는 패키지의 모든 클래스/enum이 생성되지 않도록 제외한다. 제외된 타입은 extern이 된다. recursive가 true면 컴파일러가 모든 하위 패키지를 재귀적으로 제외한다.
  • --macro excludeFile(fileName:String) — 주어진 외부 파일(한 줄당 하나)에 나열된 클래스와 enum이 생성되지 않도록 제외한다.
  • --macro keep(?path:String, ?paths:Array<String>, recursive=true) — 패키지, 모듈 또는 하위 타입 점 경로가 DCE에 의해 유지되도록 표시한다. 해석된 모듈의 하위 타입에도 확장된다. recursive가 true면 패키지 경로의 모든 하위 패키지를 재귀적으로 유지한다.
  • --macro includeFile(file:String, position) — 컴파일 타임에 JavaScript 파일을 포함한다. position은 "top", "inline" 또는 "closure"일 수 있다.

이 메서드들의 전체 문서는 haxe.macro.Compiler API 문서에서 찾을 수 있어요.

도움말(Help)

  • haxe --version — 현재 Haxe 컴파일러 버전을 출력한다.
  • haxe --help — 이 옵션 목록을 표시한다.
  • haxe --help-defines — 모든 컴파일러 특정 defines에 대한 도움말을 출력한다.
  • haxe --help-metas — 모든 컴파일러 메타데이터에 대한 도움말을 출력한다.

관련 콘텐츠(Related content) — Haxe Code Cookbook의 Compilation tutorials.

출처: Compiler Usage

본문

기본 사용

컴파일러는 -p <path>로 클래스 경로, -m <dot_path>로 메인 클래스를 받아 컴파일합니다. 출력은 대상별 스위치(--js, --php, --cpp 등)로 지정합니다. 디렉터리 대상(--php/--cpp/--cs/--java)과 파일 대상이 있습니다.

인자 종류

입력(-p, -L, -m, -D), 출력(--js, --swf, --neko, --php, --cpp, --cs, --java, --jvm, --python, --lua, --hl, --cppia, -x, --no-output, --interp), 기타 전역 인자, 대상별 인자로 나뉩니다.

전역 구성 매크로

include/exclude/keep/includeFile 매크로로 모듈 포함·제외·유지를 제어합니다. haxe.macro.Compiler API에 전체 문서가 있어요.

도움말

--version, --help, --help-defines, --help-metas로 정보를 확인합니다.

더 알아보기