Ccache (or “ccache”) is a compiler cache. It
speeds up recompilation by caching previous
compilations and detecting when the same compilation is being done again.
Ccache is free software, released under the
GNU General Public License
version 3
or later. See also the license page.

Latest release: version 3.7.11

Features

  • Supports GCC, Clang and other similar
    compilers.
    (details)
  • Works on Linux, macOS, other Unix-like operating
    systems and
    Windows.
    (details)
  • Understands C, C++, assembler, CUDA,
    Objective-C and
    Objective-C++.
    (details)
  • Supports fast “direct” and “depend” modes that don’t rely on using the
    preprocessor.
    (details)
  • Keeps statistics on hits/misses.
    (details)
  • Automatic cache size management.
    (details)
  • Easy installation.
    (details)
  • Low overhead. (details)
  • Support for rewriting absolute paths to relative in order to increase the
    cache hit ratio.
    (details)
  • Optionally uses hard links where possible to avoid copies.

[1] Might have limited support — see
supported platforms,
compilers and languages
.

Limitations

  • Only knows how to cache the compilation of a single file. Other types of
    compilations (multi-file compilation, linking, etc) will silently fall back
    to running the real compiler.
  • Some compiler flags are not supported. If such a flag is detected, ccache
    will silently fall back to running the real compiler.
  • The fastest mode (the “direct mode”) has a corner case which can result in
    false positive cache hits. This and other minor limitations are listed
    under caveats in the
    manual.

Why bother?

If you ever run make clean; make, you can probably benefit from
ccache. It is common for developers to do a clean build of a project for a
whole host of reasons, and this throws away all the information from your
previous compilations. By using ccache, recompilation goes much faster.

Another reason to use ccache is that the same cache is used for builds in
different directories. If you have several versions or branches of a software
stored in different directories, many of the object files in a build directory
can probably be taken from the cache even if they were compiled for another
version or branch.

A third scenario is using ccache to speed up clean builds performed by
servers or build farms that regularly check that the code is buildable.

You can also share the cache between users, which can be very useful on
shared compilation servers.

Is it safe?

The most important aspect of a compiler cache is to always produce exactly
the same output that the real compiler would produce. This includes providing
exactly the same object files and exactly the same compiler warnings that would
be produced if you use the real compiler. The only way you should be able to
tell that you are using ccache is the speed.

Ccache of course tries to provide these guarantees. However:

  • Compilers are moving targets. Newer compiler versions may, and often do,
    introduce features that ccache can’t foresee. In some cases it’s also very
    hard for ccache to handle the compiler behaviors in a good way, especially
    in a way that is backward compatible with legacy compilers.
  • The fastest mode (the “direct mode”) has a corner case which can result in
    false positive cache hits. This and other minor limitations are listed under
    caveats in the manual.

If you experience any bugs or undocumented limitations, please
report them.

Read More

ترك الرد

من فضلك ادخل تعليقك
من فضلك ادخل اسمك هنا