cmake で ccache を有効化するための設定
[履歴] [最終更新] (2020/07/17 22:00:38)

概要

YOCTO Linux で開発している場合など、ビルド速度が開発効率にそのまま影響する際は ccache (compiler cache) で C/C++ ビルドを高速化することを考えます。cmake と併用する場合の設定およびコマンド例を記載します。

インストール

sudo apt install ccache

以下のバイナリファイルに加えて

$ which ccache
/usr/bin/ccache

以下のようなシンボリックリンクがインストールされます。

$ ls -l /usr/lib/ccache/
total 0
lrwxrwxrwx 1 root root 16 Jul 16 16:06 c89-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 c99-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 x86_64-linux-gnu-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 x86_64-linux-gnu-g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 x86_64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jul 16 16:06 x86_64-linux-gnu-gcc-6 -> ../../bin/ccache

cmake から利用する場合

こちらのページで使い方を把握した cmake で利用する場合を考えます。

main.cpp

#include <iostream>

int main() {
    std::cout << "hi" << std::endl;
    return 0;
}

CMakeLists.txt

cmake_minimum_required (VERSION 3.0)
add_executable(main main.cpp)

ccache を有効化するためには複数の方法がありますが、例えば以下の二つの環境変数を設定する方法があります。

export CC=/usr/lib/ccache/gcc
export CXX=/usr/lib/ccache/g++

ビルドしてみます。

mkdir build
cd build/
cmake ..
make

ccache へのシンボリックリンクが利用される設定になっていることが確認できます。

$ grep ccache CMakeCache.txt
CMAKE_CXX_COMPILER:FILEPATH=/usr/lib/ccache/g++
CMAKE_C_COMPILER:FILEPATH=/usr/lib/ccache/gcc

キャッシュが生成されています

$ ccache -s
cache directory                     /root/.ccache
primary config                      /root/.ccache/ccache.conf
secondary config      (readonly)    /etc/ccache.conf
cache hit (direct)                     5
cache hit (preprocessed)               0
cache miss                            11
cache hit rate                     31.25 %
called for link                       19
cleanups performed                     0
files in cache                        22
cache size                          94.2 kB
max cache size                       5.0 GB

キャッシュディレクトリは環境変数で変更できます。

export CCACHE_DIR=$HOME/.ccache

キャッシュサイズは以下のコマンドで変更できます。

ccache -M 10G
ccache -M 100M

キャッシュの削除

ccache -C

cmake コマンドの引数を自由に設定できる場合や CMakeLists.txt ファイルを直接編集できる場合は CC および CXX 環境変数を設定するのではなく、以下の値を直接 set することもできます。

cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc ..

また、cc コマンドおよび c++ コマンドが update-alternatives などで設定されている場合も CC および CXX の設定は不要です。

cmake を利用していない場合

cmake を利用していない場合は ccache へのシンボリックリンクが優先されるように PATH を設定するだけでよく、CC および CXX の設定は不要です。

export PATH="/usr/lib/ccache:$PATH"
関連ページ