12.6.3.8 The Haxe Target

12.6.3.8 The Haxe Target

hxcpp을 통해 Haxe에서 컴파일할 때 출력 디렉토리에 Build.xml 파일이 생성됩니다. 이 파일은 생성된 파일과 의존성을 나열하고, 결국 이들을 결합하는 방법을 설명하는 toolchain/haxe-target.xml 파일을 포함합니다.

Include 순서(Include Order)

특정 빌드가 원할 수 있으므로 설정 순서를 정할 때 몇 가지 복잡함이 있습니다:

  • 컴파일러 설정
  • 일부 컴파일러 설정 재정의
  • 컴파일러나 설정에 기반한 결정
  • 표준 파일 접두/접미 설정 또는 사용
예제 순서(Example Sequence)

컴파일할 때 HXCPP_VERBOSE define을 설정하면 어떤 파일이 포함되는지 볼 수 있습니다. Windows 플랫폼의 가상 사용자 'Hugh'에 대한 예:

Using makefile: Build.xml
No specified toolchain
 - Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/setup.xml
 - Parsing include: C:\Users\Hugh\.hxcpp_config.xml (section "vars")
Using Windows compiler: MSVC
 - Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/finish-setup.xml
 - Parsing makefile: C:\Users\Hugh\test\proj\cpp\Build.xml
 - Parsing include: C:/Users/Hugh/dev/hxcpp/build-tool/BuildCommon.xml
 - Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/haxe-target.xml
 - Parsing include: C:/Users/Hugh/dev/hxcpp/toolchain/msvc-toolchain.xml
 - Parsing compiler: C:/Users/Hugh/dev/hxcpp/toolchain/common-defines.xml
 - Parsing include: C:\Users\Hugh\.hxcpp_config.xml (section "exes")
  • 커스텀 toolchain이 지정되지 않았으므로 setup.xml이 읽히며, 이는 단지 .hxcpp_config.xml을 포함합니다.
  • .hxcpp_config.xmlvars 섹션이 읽힙니다 - 주로 SDK 위치를 설정하기 위해.
  • hxcpp 빌드 도구는 호스트와 defines에 기반한 내부 로직으로 어떤 컴파일러/toolchain을 사용할지 정합니다. 이 경우 MSVC(Microsoft Visual Studio C++)가 선택됩니다.
  • 그런 다음 finish-setup.xml이 사용되는 toolchain 유형에 기반해 파일 확장자와 링크 플래그에 대한 몇 가지 표준 defines를 설정합니다.
  • 제공된 빌드 파일(Build.xml)이 처리됩니다. finish-setup.xml의 표준 defines를 사용할 수 있습니다.
  • Build.xml은 표준 Haxe target 빌드 파일(haxe-target.xml)을 가져오며, 이는 Haxe 런타임에 필요한 파일을 추가합니다.
  • 그런 다음 toolchain 파일(msvc-toolchain.xml)이 파싱됩니다 - 메인 Build.xmlfinish-setup.xml의 설정을 사용합니다. 이 파일은 표준 Haxe 컴파일러 플래그를 주입하기 위해 common-defines.xml을 포함합니다.
  • .hxcpp_config.xmlexes 섹션이 읽힙니다. 역사적으로 target에 라이브러리나 빌드 경로를 추가하기 위해.
표준 환경(Standard Environment)

finish-setup.xml은 규칙이 설정되는 곳입니다. 이러한 변수는 다음을 포함합니다:

  • haxelink - dll, static_link 또는 exe
  • LIBPREFIX - lib 또는 비어 있음
  • LIBEXTRA:
    • .iphonesim-64
    • .iphonesim
    • .iphoneos
    • .iphoneos-v7
    • .iphoneos-v7s
    • .iphoneos-64
    • .appletvsim-64
    • .appletvsim
    • .watchos
    • .watchsimulator
    • -x86
    • -v7
    • -64
  • HX_LINK_SUFFIX - LIBEXTRA, -19(MSVC 19)
  • LIBEXT - .a, .lib
  • DBG - -debug 또는 비어 있음
  • OBJEXT - 사용 가능한 옵션에 따른 -list-of-config-ids

이 변수들은 haxe-target.xml에서 사용됩니다 - 당신도 사용할 수 있습니다. 그런 다음 Haxe는 haxe target을 빌드하며, 다음과 같은 코드를 사용합니다:

<target name="HAXE_OUTPUT_FILE" value="${LIBPREFIX}${HAXE_OUTPUT_PART}${DBG}" />

   <linker id="haxe" tool="linker" toolid="${haxelink}" output="${HAXE_OUTPUT_FILE}">
     <ext value="${LIBEXTRA}.a" if="static_link" />

     <files id="__main__" unless="static_link" />
     <files id="__lib__" if="static_link"/>
     <files id="__resources__" />
     <files id="__externs__" />
     <files id="runtime" unless="dll_import" />
     <files id="cppia" if="scriptable" />
     <lib name="-lpthread" if="linux" unless="static_link" />
     <lib name="-ldl" if="linux" unless="static_link" />
</target>

여기서 컴파일러 모드에 따라 활성화/비활성화되는 다양한 파일 그룹과 Linux에 필요한 일부 표준 라이브러리를 볼 수 있습니다.

hxcpp로 생성된 코드/Build.xml 실험(Experimenting with hxcpp-generated code/Build.xml)

외부 C++ 코드를 사용하거나 메타데이터를 사용해 XML을 빌드 과정에 주입하고 컴파일러나 링커 오류가 발생한다면, Haxe를 다시 실행하지 않고 hxcpp 빌드 도구를 실행하는 것이 유용할 수 있습니다. 이렇게 하면 빌드 파일이나 생성된 C++ 코드를 수동으로 편집하면서 작동하도록 만들 수 있습니다. 이 기법으로 문제를 해결한 후 변경 사항을 주입된/외부 코드로 되돌릴 수 있습니다.

먼저 -v 플래그로 Haxe 컴파일러를 호출합니다. 이는 꽤 많은 디버그 정보를 주지만 다음 줄을 포함합니다:

haxelib run hxcpp Build.xml haxe -Dhaxe3="1" -Dhaxe_ver="4.000" -Dhxcpp_api_level="332" -Dsource-header="Generated by Haxe 4.0.0" -I"" -I"C:/Users/Hugh/dev/haxe/std/cpp/_std/" -I"C:/Users/Hugh/dev/haxe/std/"

이를 사용하려면 먼저 출력 디렉토리( Haxe 컴파일러의 --cpp 옵션에서 지정된 디렉토리)로 directory를 변경하세요. 그런 다음 haxelib run ... 명령을 셸, 커맨드 또는 배치 파일로 복사해 붙여넣으세요.

출처: The Haxe Target

더 알아보기