如何使用 CCache 进行 Cocos2d-x 编译加速
原文链接:https://blog.csdn.net/zmzsoftware/article/details/32734025
CCache是C/C++的编译器缓存。当相同的编译被再次编译时,进行检测并通过之前编译的缓存进行编译加速。所以我们可以通过这种方法给Cocos2d-x Android的编译加速。使用这种方法,在i7 CPU的Macbook Pro Retina上编译,我们的Cocos2d-x Android工程编译时间可以从10分钟减少到30秒!!
注意:以下操作仅对Mac OS X有效。
最新版本修改:
1.使用brew安装无法成功提示缺少库,所以改为使用git下载,安装参考doc/install.md说明添加依赖的库文件完成配置
2.配置完环境变量后就可以使用ccache了,不用修改default-build-commands.mk,否则报错 Recursive invocation
安装
我们使用homebrew:
|
1
|
brew install --HEAD ccache |
或者通过源码安装:
|
1
2
3
4
5
6
7
|
git clone https://github.com/jrosdahl/ccache.gitcd ccache./autogen.sh./configuremakemake installcp /usr/local/bin/ccache /usr/bin/ |
注意:默认的安装路径是 /usr/local/bin,我们需要拷贝ccache到/usr/bin/,不然ndk-build会找不到并报错
如果终端报错说找不到autoheader,这说明我们需要先安装automake:
|
1
|
brew install automake |
但是,如果如果报错是说找不到brew,我们就必须先安装brew:
|
1
|
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" |
确保ccache的路径可以被$PATH识别,运行命令:
|
1
|
ccache |
如果你看到帮助信息,恭喜你,安装成功了!
在android上配置编译环境
1.使用cmake编译:
在CMakeLists.txt文件中添加以下内容启动ccache
|
1
2
3
4
5
6
|
# 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)
|
2.使用ndk_build编译:
我们必须先设置以下环境变量来使用ccache:
|
1
2
3
4
|
vim ~/.bash_profile Add following lines:export USE_CCACHE=1export NDK_CCACHE=/usr/local/bin/ccache |
运行命令行:
|
1
|
ccache -M 10G |
这个命令将缓存大小设置为10G。当然,如果你的硬盘有足够的空间,你也可以将此设置为50G。
然后,我们跳转到NDK目录,如果你忘了这个路径,你可以使用以下命令来查看:
|
1
|
which ndk-build |
以下是我的输出结果:
|
1
|
/developer/android/android-ndk-r9b/ndk-build |
所以,我的NDK_ROOT是:
|
1
|
/developer/android/android-ndk-r9b |
打开文件:$NDK_ROOT/build/core/default-build-commands.mk
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
ifneq ($(findstring ccc-analyzer,$(CC)),)TARGET_CC = $(CC)elseTARGET_CC = ccache $(TOOLCHAIN_PREFIX)gcc #Add ccache supportendifTARGET_CFLAGS =TARGET_CONLYFLAGS =ifneq ($(findstring c++-analyzer,$(CXX)),)TARGET_CXX = $(CXX)elseTARGET_CXX = ccache $(TOOLCHAIN_PREFIX)g++ #Add ccache supportendifTARGET_CXXFLAGS = $(TARGET_CFLAGS) -fno-exceptions -fno-rtti |
编译cocos2d-x游戏
选择cocos2d-x根目录,运行:
|
1
|
python build/android-build.py -p 10 cpp-tests |
新建一个终端窗口,运行:
|
1
|
ccache -s |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
cache directory /Users/heliclei/.ccacheprimary config /Users/heliclei/.ccache/ccache.confsecondary config (readonly) /usr/local/etc/ccache.confcache hit (direct) 13588cache hit (preprocessed) 11145cache miss 696called for
link 1called for
preprocessing 14preprocessor error 1can't use precompiled header 129no input file 5files in cache 32222cache size 5.4 GBmax cache size 30.0 GB |
如果缓存的高速缓存命中(cache hit)和缓存大小(cache size)均为0,这就表示ccache没有运行,我们必须从新检查配置。
在Xcode中部署
配置Xcode(5.1)的ccache环境有点麻烦。我确实能调用ccache,但貌似没有增加编译速度。如果你有好的方法解决这个问题,请到github上为本篇教程提交pr!不过我们还是看看设置方法:
首先,我们添加2个自定义宏(user-defined macros)到cocos2d_libs的编译选项中:
|
1
2
|
CC=$(SOURCE_ROOT)/../tools/xcode_ccache_wrapperLDPLUSPLUS=$(DT_TOOLCHAIN_DIR)/usr/bin/clang++ |
然后,我们需要在$(COCOS2dX_ROOT)/tools/路径下创建名为xcode_ccache_wrapper的脚本:
|
1
2
3
4
|
#!/bin/bashexport CCACHE_CPP2=yesexport CCACHE_LOGFILE=~/Desktop/ccache.logexec /usr/local/bin/ccache /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Qunused-arguments "$@" |
设置完成,我们就可以快乐的在Xcode中编译了!
打开ccache.log可以查看cache工作状态。

浙公网安备 33010602011771号