快速的在cmake中集成ccache能力

ccache

文章来源于: Use ccache with CMake for faster compilation

C 和 C++ 编译器并不是目前最快的软件,并且不乏基于等待工作完成的单调乏味的 程序员笑话

虽然有一些方法可以解决这个问题 - 其中之一就是 ccache 。CCache 通过在私有缓存中缓存以前构建的对象文件并在您使用相同参数重新编译相同对象时重用它们来缩短编译时间。显然,如果您是第一次编译代码,这将无济于事,如果您经常更改编译标志,也无济于事。然而,大多数 C/C++ 开发都涉及使用相同的参数重新编译相同的目标文件,而 ccache 有很大帮助。

为了便于说明,下面是一个大型 C++ 项目的首次编译时间和后续编译时间的比较:

使用空缓存的原始运行:

make -j9
real    0m56.684s
user    5m31.996s
sys     0m41.638s

使用热缓存重新编译:

make -j9
real    0m5.929s
user    0m11.896s
sys     0m8.722s

安装

CCache 在几乎所有发行版的存储库中都可用。在 OS X 上使用自制软件:

brew install ccache

在基于 Debian 的发行版上使用 apt:

apt-get install ccache

配置

安装 ccache 后,您需要告诉 CMake 将其用作编译器的包装器。将这些行添加到您的CMakeLists.txt:

# Configure CCache if available
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
        set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)

重新运行cmake,接下来make应该使用 ccache 作为包装器。

与 Android NDK 一起使用

CCache 甚至可以在 Android NDK 上使用——你只需要导出NDK_CCACHE带有路径的环境变量到 ccache 二进制文件。ndk-build脚本会自动使用它。例如

export NDK_CCACHE=/usr/local/bin/ccache
ndk-build -j9

(请注意,在 Debian/Ubuntu 上,路径可能是/usr/bin/ccache)

缓存统计

要查看 ccache 是否真的在工作,可以使用ccache -s命令,它会显示 ccache 统计信息:

cache directory                     /Users/jernej/.ccache
primary config                      /Users/jernej/.ccache/ccache.conf
secondary config      (readonly)    /usr/local/Cellar/ccache/3.2.2/etc/ccache.conf
cache hit (direct)                 77826
cache hit (preprocessed)           17603
cache miss                         46999
called for link                       18
compile failed                        45