Files
UnrealEngineUWP/Engine/Documentation/Source/Programming/UnrealBuildSystem/TargetFiles/TargetFiles.KOR.udn
Sungjin Hong 93086073a3 #loc UE4DocKOR
[CL 2628502 by Sungjin Hong in Main branch]
2015-07-21 22:49:47 -04:00

123 lines
5.8 KiB
Plaintext

INTSourceChangelist:2624355
Availability:Public
Title: 언리얼 빌드 시스템 타겟 파일
Crumbs: %ROOT%, Programming, Programming\UnrealBuildSystem
Description:모듈을 빌드할 때 언리얼 빌드 시스템에 사용되는 타겟 파일에 대한 참고서입니다.
Version: 4.9
[TOC (start:2 end:3)]
언리얼 빌드 시스템은, UnrealBuildTool 이 빌드하여 동적인 Rules 모듈에 컴파일되는 각 어플리케이션에 대해 **타겟** (Target) 파일을 사용합니다. 이 파일은 원래 UnrealBuildTool 에 직접 컴파일되었던 `UEBuild*.cs` 파일을 대신합니다. 각 타겟 파일이 정의하는 클래스를 UnrealBuildTool 이 사용하여, 게임이나 프로그램 빌드 방식을 결정합니다.
UnrealBuildTool 은 이제 RulesModule.dll 을 통해 빌드중인 프로젝트에 대한 타겟을 제대로 구해옵니다.
타겟의 종류는 두 가지입니다:
* **Game** - '공유' UE4 실행파일을 활용하는 타겟입니다.
* **Program** - 독립형 실행파일 타겟입니다. ShaderCompileWorker, SlateViewer, UnrealHeaderTool 등이 이런 종류의 타겟입니다.
## 타겟 파일 작명규칙과 위치
타겟 파일은 반드시 프로그램의 루트 디렉토리나 게임의 `Source` 디렉토리에 있어야 하며, 작명규칙은 이렇습니다: `[APPNAME].Target.cs`
예를 들어 ShaderCompileWorker 프로그램 디렉토리는 `\UE4\Engine\Source\Programs\ShaderCompileWorker` 이며, `ShaderCompileWorker.Target.cs` 파일이 들어 있습니다.
비슷하게 ExampleGame `Source` 디렉토리는 `UE4\ExampleGame\Source` 이며, `ExampleGame.Target.cs` 파일이 들어 있습니다.
## 타겟 파일 내용
각 게임이나 프로그램에 대한 타겟 파일에 정의되는 클래스는 (`RulesCompiler.cs` 에서 찾을 수 있는) `TargetRules` 에서 파생됩니다.
클래스의 이름은 툴이나 게임의 이름에 `target` 을 붙여 만듭니다. 예를 들어 ShaderCompileWorker 툴의 타겟 파일에 정의된 클래스는 `ShaderCompileWorkerTarget` 가 됩니다. 마지막의 `Target` 은 **필수** 입니다. 기존 `*.Build.cs` 모듈 룰 클래스도 모두 같은 DLL 속에 컴파일되므로, 이름이 충돌되지 않도록 하기 위해 추가되는 것입니다.
UnrealBuildTool 은 Rules DLL 에서 빌드 타겟을 요청할 때, `[APPNAME]` 을 취한 다음 `Target` 을 덧붙입니다. 그래서 위와 같은 예제를 사용할 때, UnrealBuildTool 에 `ShaderCompileWorker Win64 Development` 가 전달되면, `ShaderCompileWorkerTarget` 을 관심있는 `TargetRules` 클래스 이름으로 요청합니다.
### 생성자
생성자(constructor)는 생성할 어플리케이션 이름과 타겟 종류를 설정합니다. 비교용 ExampleGameTarget 생성자입니다:
public ExampleGameTarget(TargetInfo Target)
{
Type = TargetType.Game;
Name = "ExampleGame";
}
### Setup Binaries
`TargetRules::SetupBinaries()` 는 `UEBuildBinaryConfiguration` 인스턴스 목록을 생성하는 데 사용되는데, UnrealBuildTool 은 이것을 사용하여 (생성하고자 하는 대상인) AppBinaries 배열을 채웁니다.
### Setup Global Environment
`TargetRules::SetupGlobalEnvironment()` 는 타겟에 대한 UnrealBuildTool 의 여러가지 빌드 환경설정 세팅을 설정하는 데는 물론, 글로벌 Compile, Link 환경을 셋업하는 데도 사용됩니다.
[REGION:note]
**주:** 현재 게임에는 기본적으로 UEBuildGame 클래스가 그 작업을 처리해 주고 있기 때문에, 이 함수가 들어있지 않습니다. 그러나 게임에서 이 세팅을 덮어쓰고자 한다면, 얼마든지 그리 할 수 있습니다.
[/REGION]
## 예제 타겟 파일
완성 예제로 ShaderCompileWorker.Target.cs 파일을 들어보겠습니다:
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System.Collections.Generic;
public class ShaderCompileWorkerTarget : TargetRules
{
public ShaderCompileWorkerTarget(TargetInfo Target)
{
Type = TargetType.Program;
Name = "ShaderCompileWorker";
}
//
// TargetRules interface.
//
public override void SetupBinaries(
TargetInfo Target,
ref List<UEBuildBinaryConfiguration> OutBuildBinaryConfigurations,
ref List<string> OutExtraModuleNames
)
{
List<string> LinkModules = new List<string>() { "Core", "ShaderCore", "RenderCore", "RHI", "WindowsTools", "ShaderCompileWorker" };
OutBuildBinaryConfigurations.Add(
new UEBuildBinaryConfiguration( InType: UEBuildBinaryType.Executable,
InModuleNames: LinkModules )
);
}
public override void SetupGlobalEnvironment(
TargetInfo Target,
ref LinkEnvironmentConfiguration OutLinkEnvironmentConfiguration,
ref CPPEnvironmentConfiguration OutCPPEnvironmentConfiguration
)
{
// 필요치 않은 써드 파티 기능들을 끕니다.
UEBuildConfiguration.bAllowSteamworks = false;
UEBuildConfiguration.bAllowLive = false;
UEBuildConfiguration.bCompilePerforce = false;
// 현재 Lean and Mean 모드를 강제합니다.
UEBuildConfiguration.bCompileLeanAndMeanUE = true;
// 현재 이 앱은 엔진에 대해 링크되고 있지 않으니, Core 에서 엔진 나머지 부분으로의 참조를 컴파일하지 않습니다.
UEBuildConfiguration.bCompileAgainstEngine = false;
// ShaderCompileWorker 는 콘솔 어플리케이션이며, 윈도우 앱은 아닙니다 (도입점을 WinMain() 대신 main() 으로 설정합니다).
OutLinkEnvironmentConfiguration.bIsBuildingConsoleApplication = true;
// 워커가 자주 스폰되어 느려지는 요인이 될 로깅을 끕니다.
OutCPPEnvironmentConfiguration.Definitions.Add("ALLOW_LOG_FILE=0");
OutCPPEnvironmentConfiguration.Definitions.Add("HACK_HEADER_GENERATOR=1");
OutCPPEnvironmentConfiguration.Definitions.Add("HACK_SHADER_COMPILER_WORKER=1");
}
}