Related articles

*   [Makepkg](/index.php/Makepkg "Makepkg")
*   [Distcc](/index.php/Distcc "Distcc")

[ccache](http://ccache.samba.org/) is a tool for the gcc compiler used to compile the same program over and over again with little downtime. While it may take a few seconds longer to compile a program the first time with `ccache`, subsequent compiles will be much, much faster.

## Contents

*   [1 Installation](#Installation)
*   [2 Configuration](#Configuration)
    *   [2.1 Enable ccache for makepkg](#Enable_ccache_for_makepkg)
    *   [2.2 Enable for command line](#Enable_for_command_line)
    *   [2.3 Enable with colorgcc](#Enable_with_colorgcc)
*   [3 Misc](#Misc)
    *   [3.1 Change the cache directory](#Change_the_cache_directory)
    *   [3.2 Set maximum cache size](#Set_maximum_cache_size)
    *   [3.3 Disable the cache via environment](#Disable_the_cache_via_environment)
    *   [3.4 CLI](#CLI)
    *   [3.5 makechrootpkg](#makechrootpkg)
*   [4 See also](#See_also)

## Installation

[Install](/index.php/Install "Install") the [ccache](https://www.archlinux.org/packages/?name=ccache) package.

## Configuration

The default behavior can be overridden by configuration files. Priority of the configuration settings is as follows (where 1 is highest):

1.  Environment variables
2.  Cache-specific configuration file (`$HOME/.ccache/ccache.conf`)
3.  System-wide configuration file (`/etc/ccache.conf`)

### Enable ccache for makepkg

To enable ccache when using [makepkg](/index.php/Makepkg "Makepkg") edit `/etc/makepkg.conf`. In `BUILDENV` uncomment `ccache` (remove the exclamation mark) to enable caching. For example:

 `/etc/makepkg.conf`  `BUILDENV=(fakeroot !distcc color **ccache** check !sign)` 

### Enable for command line

If you are compiling your code from the command line, and not building packages, then you will still want to use `ccache` to help speed things up.

For that, you need to change your `$PATH` to include `ccache`'s binaries before the path to your compiler:

```
$ export PATH="/usr/lib/ccache/bin/:$PATH"

```

You may want to set this line as [environment variable](/index.php/Environment_variable "Environment variable") for regular usage.

**Note:** This will inevitably enable ccache for makepkg as well if invoked with this PATH.

### Enable with colorgcc

Since colorgcc is also a compiler wrapper, some care needs to be taken to ensure each wrapper is called in the correct sequence.

```
export PATH="/usr/lib/colorgcc/bin/:$PATH"    # As per usual colorgcc installation, leave unchanged (don't add ccache)
export CCACHE_PATH="/usr/bin"                 # Tell ccache to only use compilers here

```

Then colorgcc needs to be told to call ccache instead of the real compiler. Edit `/etc/colorgcc/colorgccrc` and change the `/usr/bin` paths to `/usr/lib/ccache/bin` for all the compilers in `/usr/lib/ccache/bin`:

 `/etc/colorgcc/colorgccrc` 
```
g++: /usr/lib/ccache/bin/g++
gcc: /usr/lib/ccache/bin/gcc
c++: /usr/lib/ccache/bin/g++
cc: /usr/lib/ccache/bin/cc
g77:/usr/bin/g77
f77:/usr/bin/g77
gcj:/usr/bin/gcj
```

## Misc

### Change the cache directory

You may want to move the cache directory to a faster location than the default `~/.ccache` directory, like an SSD or a [ramdisk](/index.php/Ramdisk "Ramdisk").

To change the cache location only in the current shell:

```
$ export CCACHE_DIR=/ramdisk/ccache

```

Or to change the location by default:

 `/home/*user*/.ccache/ccache.conf`  `cache_dir = /ramdisk/ccache` 

### Set maximum cache size

The default value is 5 gigabyte, however it is possible to use a lower or even a higher value:

```
$ ccache --set-config=max_size=2.0G

```

### Disable the cache via environment

If you wish to disable CCache only in the current shell:

```
$ export CCACHE_DISABLE=1

```

### CLI

You can use the command-line utility `ccache` to show a statistics summary:

```
$ ccache -s

```

or clear the cache completely:

```
$ ccache -C

```

### makechrootpkg

It is also possible to use ccache with makechrootpkg. To retain the cache when the chroot is cleaned the makechrootpkg option `-d` can be used to bind the cache directory from the regular system into the chroot, eg.:

```
$ mkdir /path/of/chroot/ccache
$ makechrootpkg -d /path/to/cache/:/ccache -r /path/of/chroot -- CCACHE_DIR=/ccache

```

Then ccache can be configured for the chroot in the same way as explained above for the regular system.

## See also

*   [ccache manual](http://ccache.samba.org/manual.html)