UnityBuild는 C++ 에 적용 가능한 컴파일 기법이다. 일부 상황에서, 특히 대규모 프로젝트에서 컴파일 시간을 놀랄 만큼 줄여준다고 한다. 이 기법을 Xoreax Incredibuild와 같은 분산 빌드 도구와 함께 사용하면 극적으로 성능 향상이 될 가능성이 있다.
Earlgrey.UnityBuild 는 일반적인 Visual C++ 프로젝트를 UnityBuild 용으로 변환하는 편리한 도구이다. 단순하며 사용하기 쉽다.
환경
- .NET Framework SDK 4.0 이상
- Visual Studio 2008
Visual Studio 2010/2011 는 가까운 미래에 지원할 예정이다.
설치하기
- Earlgrey 프로젝트에서 Earlgrey.BuildTools 의 최신 버전을 다운로드 받는다.
- 압축을 해제하면 다음과 같은 폴더 구조가 보인다.
- MSBuildExtension
- UnityBuild
- UserGuide
- UnityBuild 폴더 안에 있는 바이너리만 있으면 된다.
- 영문 설명서는 UserGuideHelp 폴더 안에 있다.
사용법
UnityBuild.ConsoleUi.exe
를 실행하면 다음과 같이 사용법을 보여준다.
C:WorkspacetrunksrcBuildToolsAny CPU-Debugbin>UnityBuild.ConsoleUi.exe How to use! -i, --input (Required) Solution file path. -e, --exclude (Not Required) Visual C++ project names you want to exclude. Separated by a ';'. For instance, -e"Earlgrey";"Earlgrey.Test" -c, --copy (Not Required) Copy the solution/projects and use them. -o, --optimization (Not Required) Possible values are 'Normal' and 'Best'. -v, --verbose (Not Required) Print details during execution. C:>
명령 줄 스위치
스위치 | 필수 여부 | 예제 | 설명 |
-i | 필수 | -i”C:Earlgrey.sln” | 변환할 원본 솔루션 파일의 경로. |
-c | 필수 아님 | -c | 원본 솔루션과 프로젝트 파일의 복사본을 만든 후, 복사본을 변환한다. |
-e | 필수 아님 | -e”gtest;Earlgrey.Tests” | 변환하지 않을 프로젝트의 목록을 지정한다. 프로젝트 이름은 ‘;’로 구분 짓는다. |
-o | 필수 아님 | -o”Normal” | 최적화 수준
|
솔루션을 빌드하는 법
솔루션과 솔루션에 포함된 프로젝트 파일을 백업하기
명령 줄 스위치 –c 를 선택하지 않으면 UnityBuild.ConsoleUi.exe 가 솔루션 파일(.sln)을 수정하므로 일이 잘못됐을 때를 대비해 백업 계획을 수립하기를 권한다.
UnityBuild.ConsolUi.exe 에 –c 스위치 넣는 편이 좋다. 이 스위치를 지정하면 솔루션과 솔루션에 포함된 프로젝트 파일의 복사본을 만들고, 원본은 그대로 둔 채 그 복사본을 UnityBuild 용으로 변환한다.
솔루션과 그 프로젝트 파일을 변환하기
-i 스위치는 가장 중요한 옵션이다. 이 스위치는 변환할 대상 솔루션 파일의 경로를 지정하는데 사용한다.
C:WorkspacetrunksrcBuildToolsAny CPU-Debugbin>UnityBuild.ConsoleUi.exe -i "......Earlgrey.sln" working ... done! C:>
-i 스위치를 지정하고 UnityBuild.ConsoleUi.exe 를 실행하면 일부 파일이 바뀌었다는 사실을 알게 된다. 예를 들어, TortoiseSVN 이 설치된 윈도우에서 Trunk 폴더의 로컬 복사본이 다음 그림처럼 된다.
붉은색 오버레이 아이콘은 UnityBuild.ConsoleUi.exe 가 일부 파일을, 실제로는 일부 .vcproj 파일을 바꾸었음을 나타낸다. 이 그림에 등장하는 Earlgrey.sln (–i 스위치에 지정한 대상 솔루션) 에는 .vcproj 와 더불어 .csproj 도 포함된다. 하지만 걱정할 필요 없다. UnityBuild.ConsoleUi.exe 는 이와 같은 복합 솔루션도 제대로 처리한다. .vcproj 만이 변환 과정에 영향을 받는다.
-e 스위치를 사용하면 일부 .vcproj 를 변환대상에서 뺄 수 있다. Earlgrey.sln 에는 외부 오픈 소스 프로젝트가 포함된다. 예를 들어, gtest (Google Test) 와 StackWalker_VC9 (StackWalker ) 가 그러한 프로젝트이다. 보통 외부 라이브러리는 손대지 않는 편이 좋은데 이런 상황에서 –e 스위치가 유용하다.
C:WorkspacetrunksrcBuildToolsAny CPU-Debugbin>UnityBuild.ConsoleUi.exe -i "......Earlgrey.sln" -e "gtest;StackWalker_VC9" working ... done! C:>
위와 같이 명령을 실행하면 gtest 와 StackWalker_VC 를 변환 대상에서 제외한다. UnityBuild.ConsoleUi.exe 를 실행한 후 로컬 복사본 폴더 ‘vendor’와 ‘src’를 보면, ‘vendor’ 프로젝트 안에 있는 두 프로젝트가 변하지 않은 채 그대로 있음을 볼 수 있다 (다음 스크린샷을 보자).
-c 스위치가 하는 일은 간단하다. 이 스위치를 지정하면 UnityBuild.ConsoleUi.exe 가 Earlgrey.sln 과 그 안에 포함된 프로젝트 파일 복사하여 새로운 솔루션 파일을 만든다. 원본 파일을 그대로 두고 싶을 때 매우 유용하다.
-o 스위치는 최적화 수준을 결정한다. 알고리즘은 언제 어떻게 변경될지 모르므로 세부사항을 알려주지 않는다.
따라하기
예제를 다운로드 받기
SMTP Client with SSL/TLS을 이 튜토리얼에서 사용한다. 소스 파일을 다운로드 받고 압축을 푼다. 그러고 나서 Visual Studio 2008 용으로 솔루션 파일을 변환한다.
이 예제 소스코드에는 Debug 와 Release 구성이 있다.
UnityBuild.ConsoleUi.exe 를 실행하기
UnityBuild.ConsoleUi.exe 를 실행하여 원본 솔루션을 UnityBuild 용으로 변환한다.
f:DownloadsSample>UnityBuildUnityBuild.ConsoleUi.exe -i CSmtp_v2_0_sslCSmtp. sln -c -v [Switches] * Input file path is "CSmtp_v2_0_sslCSmtp.sln", its copied version will be con verted and used . * Verbose mode is turned on. * Current optimization level is 'Normal'. working ... converted! f:DownloadsSample
-c 스위치를 지정하였기에 새 솔루션 파일 “f:DownloadsSampleCSmtp_v2_0_sslCSmtp-UnityBuild.sln”이 생성된다.
새 솔루션 파일을 살펴보기
UnityBuild 라 이름 붙은 필터(들)가 보인다. UnityBuild 를 할 때 쓰는 새 소스 파일은 모두 필터에 들어간다. DEBUG/RELEASE 구성일 때는 이 필터에 포함된 소스 파일은 빌드에서 제외된다 (붉은색 오버레이 아이콘).
UnityBuild 용으로 새로운 구성 값이 생성됐다.
- Debug-UnityBuild
- Release-UnityBuild
위의 구성 중 하나를 고르면 UnityBulid 필터에 든 소스 파일이 활성화되고 UnityBuild를 할 수 있다.
빌드하기!
변환된 솔루션을 빌드하자! 그러면 원하던 바를 얻게 될 것이다!
외부 자료
-
The Magic of Unity Builds
The Magic of Unity Builds 는 UnityBuild의 이론을 다룬 가장 유명한 자료일 것이다. 웹 상의 자료 대부분이 이 글을 인용한다. 게다가 튜토리얼 동영상이 있어서 배우기 쉽다.
-
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010 는 UnityBuild 를 다룬 한국어 자료 중 가장 널리 알려졌다.
-
C/C++ 프로젝트 빌드 속도 개선 – UnityBuild 를 아세요?
C/C++ 프로젝트 빌드 속도 개선 – UnityBuild 를 아세요? 는 Earlgrey.UnityBuild 의 사용법을 다룬다..