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.xml의vars섹션이 읽힙니다 - 주로 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.xml과finish-setup.xml의 설정을 사용합니다. 이 파일은 표준 Haxe 컴파일러 플래그를 주입하기 위해common-defines.xml을 포함합니다. .hxcpp_config.xml의exes섹션이 읽힙니다. 역사적으로 target에 라이브러리나 빌드 경로를 추가하기 위해.
표준 환경(Standard Environment)
finish-setup.xml은 규칙이 설정되는 곳입니다. 이러한 변수는 다음을 포함합니다:
haxelink-dll,static_link또는exeLIBPREFIX-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,.libDBG--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