개요

Build time을 줄이기 위해서는 다양한 방법이 존재한다.

여기서는 그 중에서 ccache를 이용한 compiler cache를 소개한다.

사용방법

ccache 사용방법에는 PATH에 추가하는 방법과 command-line에 prefix를 추가하는 방법이 있다.

아래는 ccache를 prefix로 추가하는 방법이다.

ccache gcc source.c

다른 하나는 아래와 같이 symbolic link로 컴파일러를 참조하도록 하는 방법이다.

export PATH=/usr/local/bin/:$PATH
ln -s /usr/bin/ccache /usr/local/bin/gcc
ln -s /usr/bin/ccache /usr/local/bin/g++
ln -s /usr/bin/ccache /usr/local/bin/cc
ln -s /usr/bin/ccache /usr/local/bin/c++

cache 디렉토리는 CCACHE_DIR 와 $CCACHE_DIR/ccache.conf. 등의 환경변수를 참조하며 없으면 HOME 디렉토리의 .ccache 등을 참조한다.

cache를 초기화 하기 위해서는 다음과 같이 초기화 할 수 있다.

ccache -c

원리

C/C++ 소스 파일을 pre-processing 결과를 md4/blake3 등의 hashing을 이용해 동일하면 해당 파일을 이용하는 것으로 보인다.

최신 버전에서는 blake3를 사용하는 것을 확인했다.

소개에 따르면 blake3는 MD5, SHA1 등의 hashing function 보다 빠르고 안전하며 병렬화에 장점을 가진다고 한다.

Build test

ccache를 이용해 openssl 3.2.0을 빌드해보자 (core=1)

./Configure
time make
optiontime
w/ ccache 1st3m33.900s
w/ ccache 2nd51.809s
w/o ccache4m2.339s

결론

보통 ccache를 이용한 첫 빌드는 ccache로 실행하는 편이 약간 더 걸리는데 여기서는 ccache를 사용하지 않은 편이 더 많은 시간이 소요되었다.

ccache 를 이용한 방법 이외에도 distcc 와 같은 network 분산형 컴파일 도구도 있으며 두가지를 동시에 사용하여 build time을 줄이기도 한다.