C++ 유니티 빌드

빌드 시간을 줄여주는 유니티 빌드에 대해서 알아보자.

해당 글은 아래 사이트의 글을 참고했습니다.



C++ 빌드의 문제점


컴파일러 입력량

C++ 의 경우 아래의 단순한 코드를 컴파일하기만 해도 전처리 지시자에 의해 12,516 라인이 된다. 물론 대부분 의미 없는 라인이다.

동일한 의미의 코드를 Java 는 9 라인, C# 은 5 라인인 것에 비하면 터무니없는 입력량이다. 이것은 하나의 모듈에 코드를 입력했기 때문에 이정도인 것이다. 실제로 모듈이 쪼개질 수록 겹치는 헤더 파일들이 존재할 것이며, 그렇게 되면 기하급수적으로 라인의 수는 증가될 것이다. 아래의 표를 보자.

main.cppsecond.cppthird.cpp
windows.h
stdio.h
tchar.h
stdafx.h
vector
second.h
vector
third.h
windows.h
stdio.h
tchar.h
stdafx.h
vector
second.h
windows.h
stdio.h
tchar.h
stdafx.h
vector
third.h

windows.h, stdio.h, tchar.h, stdafx.h, vector 가 각 cpp 파일에 포함되어 있기 때문에 컴파일 입력량이 불필요하게 중복되는 것을 확인할 수 있다.



해결 방법


파일 모으기

해결 방법은 의외로 간단하다. 아래 처럼 cpp 파일을 모으면 된다. 그렇게 되면, 위에서 언급한 불필요하게 헤더 파일들이 중복되는 것을 방지할 수 있다.

UnityBuild.cpp
windows.h
stdio.h
tchar.h
stdafx.h
vector
second.h
vector
third.h
main.cpp
second.cpp
third.cpp


속도 개선

회사 프로젝트를 적용한 결과 아래와 같은 속도 개선을 얻게됬다.

경과 시간이전 대비 개선
기존 Build00:01:50.92default
Unity Build00:00:12.12약 89%
Unity Build + 다중 프로세서 컴파일00:00:09.92약 18%



UnityBuid 만들기


‘미리 컴파일된 헤더 사용 안 함’ 설정

  • 프로젝트 속성 – C/C++ – 미리 컴파일된 헤더 – 미리 컴파일된 헤더 사용 안 함


cpp 파일 빌드에서 제외’ 설정

소스가 합쳐질 cpp 파일을 제외한 cpp 파일을 빌드에서 제외한다.

  • cpp 파일 속성 – 일반 – 빌드에서 제외 –


cpp 파일 모으기

cpp 파일들을 특정 cpp 파일 한 곳에 모두 모은다.



주의 사항

  1. 모든 cpp 파일을 한 곳으로 묶지 말자. 입력 파일이 너무 크면 컴파일러 오류가 발생할 수 있다. 적당히 분산해서 묶자.
  2. cpp 파일을 묶었기 때문에 이제는 동일한 이름을 가진 전역 / static 함수 및 변수들의 이름이 충돌하게 된다. 동일한 이름을 변경해야 한다.



UnityBuild 자동화

UnityBuild 를 위한 일련의 작업을 자동으로 해주는 툴을 하나 만들면 편하다. 내가 만든 자동화 프로젝트는 아래의 링크에서 확인하길 바란다.




1 thought on “C++ 유니티 빌드”

Reply