C++ 프로젝트의 빌드 속도 개선하기 – UnityBuild편

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:February 8, 2020

UnityBuild는 C++ 에 적용 가능한 컴파일 기법이다. 일부 상황에서, 특히 대규모 프로젝트에서 컴파일 시간을 놀랄 만큼 줄여준다고 한다. 이 기법을 Xoreax Incredibuild와 같은 분산 빌드 도구와 함께 사용하면 극적으로 성능 향상이 될 가능성이 있다.

Earlgrey.UnityBuild 는 일반적인 Visual C++ 프로젝트를 UnityBuild 용으로 변환하는 편리한 도구이다. 단순하며 사용하기 쉽다.

환경

  • .NET Framework SDK 4.0 이상
  • Visual Studio 2008

Visual Studio 2010/2011 는 가까운 미래에 지원할 예정이다.

설치하기

  1. Earlgrey 프로젝트에서 Earlgrey.BuildTools 의 최신 버전을 다운로드 받는다.
  2. 압축을 해제하면 다음과 같은 폴더 구조가 보인다.
    • MSBuildExtension
    • UnityBuild
    • UserGuide
  3. UnityBuild 폴더 안에 있는 바이너리만 있으면 된다.
  4. 영문 설명서는 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” 최적화 수준

  • Normal
  • Best

솔루션을 빌드하는 법

솔루션과 솔루션에 포함된 프로젝트 파일을 백업하기

명령 줄 스위치 –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 폴더의 로컬 복사본이 다음 그림처럼 된다.

image

붉은색 오버레이 아이콘은 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’ 프로젝트 안에 있는 두 프로젝트가 변하지 않은 채 그대로 있음을 볼 수 있다 (다음 스크린샷을 보자).

image

-c 스위치가 하는 일은 간단하다. 이 스위치를 지정하면 UnityBuild.ConsoleUi.exe 가 Earlgrey.sln 과 그 안에 포함된 프로젝트 파일 복사하여 새로운 솔루션 파일을 만든다. 원본 파일을 그대로 두고 싶을 때 매우 유용하다.

-o 스위치는 최적화 수준을 결정한다. 알고리즘은 언제 어떻게 변경될지 모르므로 세부사항을 알려주지 않는다.

따라하기

예제를 다운로드 받기

SMTP Client with SSL/TLS을 이 튜토리얼에서 사용한다. 소스 파일을 다운로드 받고 압축을 푼다. 그러고 나서 Visual Studio 2008 용으로 솔루션 파일을 변환한다.

이렇게 변환한 예제 다운로드 받기

이 예제 소스코드에는 Debug 와 Release 구성이 있다.

CSmpt-Configurations

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”이 생성된다.

NewSolutionFileForUnityBuild

새 솔루션 파일을 살펴보기

UnityBuild 라 이름 붙은 필터(들)가 보인다. UnityBuild 를 할 때 쓰는 새 소스 파일은 모두 필터에 들어간다. DEBUG/RELEASE 구성일 때는 이 필터에 포함된 소스 파일은 빌드에서 제외된다 (붉은색 오버레이 아이콘).

NewSolutionWithDebug

UnityBuild 용으로 새로운 구성 값이 생성됐다.

  • Debug-UnityBuild
  • Release-UnityBuild

위의 구성 중 하나를 고르면 UnityBulid 필터에 든 소스 파일이 활성화되고 UnityBuild를 할 수 있다.

NewSolutionWithDebugUnityBuild

빌드하기!

변환된 솔루션을 빌드하자! 그러면 원하던 바를 얻게 될 것이다!

UnityBuild

외부 자료

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments