본문 바로가기
C,C++/C++

Unity Build(유니티 빌드)란?

by woohyeon 2021. 11. 14.
반응형

C/C++에서 유니티 빌드라는 시스템이 있다. 여기서 유니티는 유니티 엔진의 유니티가 아니다. 여기서 유니티는 하나로 뭉쳐서 빌드한다는 뜻이다. 

C/C++과 같이 소스 파일이 헤더 파일을 포함하는 시스템의 경우 컴파일이 오래 걸릴 수 있다는 특징이 있다. 이러한 시스템의 빌드는 컴파일과 링크 과정으로 나뉘는데, 컴파일은 소스 파일(.cpp) 단위로 컴파일이 된다. 그런데 각 소스 파일들은 보통 헤더 파일을 include 한다. include는 단순히 컴파일 전에 컴파일러가 헤더 파일의 내용을 그대로 소스 파일에 복사하는 역할이다.

만약 10개의 소스 파일이 각각 동일한 헤더 파일을 모두 include하고 있다면 동일한 헤더의 내용이 10개의 소스 파일에 모두 복사가 되고, 10개의 소스 파일이 각자 컴파일되면 결국 동일한 헤더 파일의 내용이 10번이나 컴파일 되는 것이다. 그래서 어느 헤더 파일을 참조하는 소스 파일이 많으면, 헤더 파일의 1라인만 수정해도 재컴파일이 엄청 오래 걸리는 경우가 많다. 

그래서 결국 유니티 빌드라는 건 동일한 헤더가 여러번 컴파일되는 현상을 피하는 기법이다. 인터넷을 찾아보면 아래와 같이 헤더가 아닌 소스 파일들을 include하는 것을 볼 수 있다. 아래의 두 소스 파일들은 동일한 헤더 파일을 include하고 있다고 가정한다. 

foo.cpp

컴파일 시 위의 foo.cpp 파일 하나만 컴파일한다. 위에 include된 두 소스 파일이 포함하는 동일한 헤더는 #pragma once와 같은 전처리기 지시문을 통해 최종적으로는 중복되지 않게 하나만 포함될 것이다.

따라서 많은 시간을 절약할 수 있게 된다.


Reference

https://en.wikipedia.org/wiki/Unity_build

https://www.slideshare.net/devcatpublications/ndc2010-unity-build

https://www.youtube.com/watch?v=S3u862k6Bc4 




댓글