INTSourceChangelist:3810557 Availability:Public Title:자동 프로젝트 파일 생성 Crumbs:%ROOT% Parent:Programming/UnrealBuildSystem Order: Description:현재 워크스페이스에서 게임과 모듈에 쓸 프로젝트 파일을 자동으로 생성하는 프로세스입니다. Version: 4.16 prereq:Programming/Development/BuildingUnrealEngine topic-image:topic_prjFileGen.png tags:Programming tags:Unreal Build System [TOC(start:1 end:2)] [REGION:warning] 이 가이드는 저희가 GitHub 에 공개한 소스 코드에서 UE4 를 다운로드하고 빌드한 사용자를 위한 것입니다. [/REGION] 최신 언리얼 엔진 4 코드를 받아도 엔진이나 예제 게임을 컴파일하고 실행할 수 있도록 Visual Studio 나 Xcode 프로젝트 파일이 포함되어 있지 않다는 것을 알게 되실 것입니다. 로드할 프로젝트 파일을 생성하는 스크립트를 실행해 줘야 하는데요: * UE4 메인 디렉터리의 GenerateProjectFiles.bat 파일을 실행시킵니다. [REGION:note] 이 스크립트는 어느 폴더에서도 실행시킬 수 있습니다. (원한다면 바탕화면에 바로가기를 만드세요.) [/REGION] * 프로젝트 생성기 툴이 모듈과 타깃 빌드 파일을 분석하여 새로운 프로젝트 파일을 생성합니다. 이 작업은 15 초 정도 걸립니다. 이게 끝입니다! Visual Studio 개발자의 경우 이렇게 하면 같은 디렉터리에 UE4.sln 파일이 생깁니다. 이 솔루션 파일을 사용하여 언리얼 엔진 4 게임과 프로그램을 빌드하고 실행시킵니다. (처음 컴파일하는 경우에는 Win64 플랫폼에서 Development 환경설정을 사용하여 빌드할 것을 추천합니다!) [REGION:note] 기본적으로 감지된 SDK 에 대해 사용가능한 모든 플랫폼용 빌드가능 프로젝트를 생성하므로, 모바일 플랫폼용으로도 빌드하고 콘솔 디버깅도 가능합니다. (Windows처럼) 현재 실행중인 플랫폼 전용 프로젝트를 생성하려는 경우, `GenerateProjectFiles.bat` 에 '-CurrentPlatform' 인수를 붙여 실행합니다. 프로젝트 파일이 조금 가벼워 집니다. [/REGION] **중요**: 기억하실 것은 소스 컨트롤에서 새로 변경된 코드를 동기화시킨 다음 `GenerateProjectFiles.bat` 를 재실행해 줘야 합니다. 깜빡하시면 게임 컴파일이나 실행시 문제가 생길 확률이 높습니다. 소스 파일을 추가하거나 제거하는 등 로컬 모듈을 변경했다면 `GenerateProjectFiles.bat` 파일을 재실행해 줘야 합니다. 프로젝트 파일을 수동 변경하는 것은 바람직하지 않습니다. ## UnrealVS 익스텐션 통합 Visual Studio 용 [](Programming/Development/VisualStudioSetup/UnrealVS) 에는 현재 로드된 솔루션에 대한 프로젝트 파일을 재생성하는 툴바 버튼이 있습니다. 이 기능에 단축키를 지정할 수도 있습니다. Visual Studio 에서 `Tools -> Options -> Environment -> Keyboard` 를 연 다음 `UnrealVS.RefreshProjects` 를 검색하세요. 참고로 이 기능은 솔루션을 로드한 이후에만 사용할 수 있습니다 (왜냐면 어느 코트나 브랜치에 대해 프로젝트를 생성해야 할지 알 수 있어야 하기 때문입니다). 생성된 `UE4.sln` 파일이 없다면, 먼저 `GenerateProjectFiles.bat` 스크립트를 직접 실행해 줘야 합니다. ## 명령줄 옵션 (고급) 프로젝트 생성기에는 필요에 따라 생성되는 프로젝트 파일을 맞출 수 있는 명령줄 인수 옵션이 조금 있습니다. 전형적으로 이 옵션은 필수이거나 추천하지도 않습니다. | 옵션 | 설명 || ---- | ---- | -CurrentPlatform | 감지된 타깃 플랫폼 전부가 아닌, 현재 데스크톱 플랫폼용 프로젝트만 생성합니다 (Windows 또는 Mac). | -2015 | Visual Studio 2015 네이티브 포맷으로 프로젝트를 생성합니다. 이 옵션 사용시 Visual C++ 2015 컴파일러가 사용됩니다. | -2017 | VS 2017 원래 포맷으로 프로젝트를 생성합니다. 이 옵션을 설정하면 Visual C++ 2017 컴파일러를 사용합니다. | -ThirdParty | 헤더와 써드 파티 라이브러리의 파일을 프로젝트에 추가합니다. PhysX, Steamworks, Bink 등에 대한 심볼과 파일을 Visual Assist 에서 확인하고자 할 때 좋을 수 있습니다. 그러나 프로젝트 파일 로드 시간이 길어질 수 있습니다! | -Game `GameName` | 프로젝트 제너레이터에 다른 모든 프로젝트는 제외하고 지정된 프로젝트 이름에 대한 코드와 콘텐츠만 포함된 프로젝트를 생성하라 이릅니다. 프로젝트 이름도 반드시 지정하도록 하세요. 예를 들어 `GenerateProjectFiles.bat ShooterGame.uproject -Game` 이라 치면 ShooterGame 용 소스와 타깃만 들어있는 프로젝트가 생성됩니다. 하나의 게임 프로젝트와 함께 Engine 소스 코드와 프로그램을 포함시키려는 경우, `-Engine` 파라미터를 붙여도 됩니다. | -Engine | `-Game` 과 함께 사용하면 Engine 코드, 콘텐츠, 프로그램도 생성되는 솔루션에 포함시키도록 합니다. 게임 프로젝트 작업을 하면서 엔진 소스 작업도 많이 할 것 같다 싶은 경우에 좋습니다. | -NoIntelliSense | IDE 에서 자동 완성과 오류 스퀴글에 사용되는 인텔리센스 데이터 파일을 생성하지 않습니다. | -AllLanguages | 모든 언어로 된 엔진 문서를 포함합니다. 기본적으로는 영문 프로젝트의 파일만 포함합니다. | -OnlyPublic | 지정되면, 엔진 모듈용으로 생성되는 프로젝트에 공용 헤더 파일만이 포함됩니다. 기본적으로 모든 소스 파일은 엔진 모듈에 포함됩니다. 이를 통해 프로젝트 로드 시간은 빨라질 수 있지만, 엔진 코드 탐색이 어려워질 것입니다. | -NoShippingConfigs | 생성되는 프로젝트에서 `Shipping` 과 `Test` 빌드 구성을 뺍니다. 처리해 줘야 하는 대상 구성 수가 줄어듭니다. | -Platforms=`PlatformName`| 빌드가능 프로젝트를 생성할 기본 대상 플랫폼 세트를 덮어쓰고, 그 대신 지정한 플랫폼에 대한 프로젝트를 생성합니다. 다중 플랫폼 지정은 '+' 기호로 구분합니다. 생성되는 솔루션 파일 이름 뒤에 플랫폼 이름이 접미사로 붙기도 합니다. | ## 자주 묻는 질문 (FAQ) ### 프로젝트 파일을 업데이트하지 않았는데도 새로 추가된 소스 파일이 컴파일되는 이유는? 언리얼 엔진 4 빌드 시스템에서는 사실 코드를 컴파일하는 데 프로젝트 파일이 필요하지 않습니다. Unreal Build Tool 은 항상 모듈과 타깃 빌드 파일을 사용하여 소스 파일 위치를 파악합니다. 이런 젼챠로 소스 파일을 새로 추가하고 컴파일을 시작하면, 프로젝트 파일을 새로고치지 않았어도 빌드에 새로운 소스 파일이 추가된다는 점, 알아두시면 좋습니다. ### 실제 파일이 저장되는 곳은? Visual Studio 프로젝트의 경우, 생성되는 솔루션 파일은 `UE4.sln` 이며, UE4 루트 디렉터리에 저장됩니다. 그러나 프로젝트 파일은 /UE4/Engine/Intermediate/ProjectFiles/ 디렉터리에 저장됩니다. 여기 저장되는 파일들은 언제고 삭제하고 재생성해도 됩니다만, 명령줄 인수 문자열같은 프로젝트 전용 개인설정을 잃을 수 있습니다. ### 프로젝트 파일을 생성해서 좋은 점은? 확실히 장단점은 있습니다만, UE4 용 프로젝트 파일을 생성하기로 결정한 중요 이유 몇가지는 이렇습니다: * 언리얼 엔진 4 는 다중 플랫폼 작업을 하도록 디자인되어 있으나, 여러 팀들은 언제고 소수의 플랫폼 작업만을 하게 마련입니다. 프로젝트 파일을 생성함으로써 무관한 플랫폼 전용 파일과 빌드 구성을 뺄 수 있습니다. * UE4 프로그래밍 방법론상 다수의 서브 모듈을 포함하도록 되어 있기에, 프로그래머가 새로운 모듈을 가급적 쉽게 추가할 수 있도록 하는 것이 매우 중요합니다. * 프로젝트 생성기는 고도로 정교한 정의는 생략시키고 UE4 코드 작업시 Visual Studio IntelliSense 에 사용되는 경로는 포함시킵니다. * 프로젝트 파일이 자동 생성되면 프로젝트를 새로 구성하기가 훨씬 쉬워집니다. * 다중 플랫폼 및 (Visual Studio 와 Xcode 같은) 개발 환경도 지원하고자 했습니다. 프로젝트 파일 여러 세트를 수동 관리하다 보면 오류가 생기거나 지치기 쉽습니다. * 프로그래머가 고도의 맞춤형 프로젝트 파일을 생성할 수 있도록 하고자 했습니다. 앞으로 이런 부분이 더욱 중요해 질 것이라 생각합니다. * 소스 파일의 디렉터리 구조는 프로젝트 파일 솔루션 계층구조에 자동으로 반영됩니다. 소스 파일을 둘러볼 때 정말 편리한 기능이나 프로젝트를 수동 작성할 때는 유지하기가 어려운 부분이었습니다. * 언리얼 엔진 빌드 구성은 매우 복잡하고 수동 유지하기 힘듭니다. 프로젝트 생성기로 인해 이러한 부분이 개발자에게 투명히 공개됩니다. ### 프로젝트에 있는 기타 파일들의 용도는? C++ 모듈에 대한 소스 코드와 함께, 생성되는 폴더에 기타 파일들도 자동으로 추가합니다. 이는 그냥 검색할 때 그 파일 위치를 쉽게 찾도록 하기 위함입니다. 생성되는 프로젝트에 추가되는 기타 파일 예제는: * 셰이더 소스 코드 (`*.usf`) * 엔진 문서 파일 (`*.udn`) * 프로그램 환경설정 파일 (`*.ini`) * 현지화 파일 (`*.int`) * 프로그램 리소스 파일과 manifest (`*.rc`, `*.manifest`) * 몇몇 외부 (비생성) 프로젝트 파일 (UnrealBuildTool, Clean 등) ### 소스 컨트롤에는 체크 인 된 프로젝트 파일이 없는 이유는? 프로젝트 파일에 SCC 병합을 시키자니 지루하고 오류 생기기 딱 좋았습니다. 새로운 시스템에서는 프로젝트 파일을 순수히 중간 파일(intermediate)로 취급하여 이 문제를 완벽히 해결했습니다. 게다가 솔루션 파일은 팀마다 다른 게임 프로젝트를 작업중이라면 달라지게 마련입니다. 저희가 에픽에서 사용하는 프로젝트 파일을 수정없이 다른 팀에서 그대로 사용하기도 좋을 리 만무입니다. ### `GenerateProjectFiles.bat` 가 실제로 하는 일은? Unreal Build Tool 위주의 단순한 스크립트로, 프로그램 실행파일 빌드 대신 프로젝트 파일을 빌드하는 특수 모드로 실행되는 것입니다. Unreal Build Tool 에 `-ProjectFiles` 명령줄 옵션을 붙여 실행합니다. ### 프로젝트 생성기 코드를 변경하고 있는데, 디버깅 방법은? * 스타트업 프로젝트를 UnrealBuildTool 로 바꿉니다. * 디버깅용 명령줄 파라미터를 이렇게 설정합니다: `-ProjectFiles` * 작업 디렉터리를 다음에 대한 로컬 경로로 설정합니다: [Your UE4 Directory]/Engine/Source/ * 평소처럼 컴파일하고 디버깅합니다. 유의할 점은 프로젝트 생성기가 Visual Studio 에서 작업중이던 프로젝트 파일을 덮어쓸(clobber) 수 있다는 점입니다. 이런 젼챠로 일반적인 UE4 솔루션 파일을 통해 디버깅을 하기 보단 가끔은 UnrealBuildTool 프로젝트를 Visual Studio 에 직접 로드하는 것이 좋을 수도 있습니다. ### 동시에 여러 환경설정 빌드를 하는 방법은? Visual Studio 의 `Batch Build` 기능을 사용하면 됩니다. Build 메뉴 아래서 찾을 수 있으며, 그저 컴파일하고자 하는 모든 환경설정을 선택한 다음 Build 를 클릭하면 됩니다. 앞으로 이 부분 인터페이스를 더욱 작업하기 쉽도록 만들 궁리를 하고 있습니다.