如何在bjam项目中配置使用ccache编译工具
在Bjam中配置GCC+ccache(拆分编译与链接)
关键原因
Bjam默认会把编译(gcc -c)和链接(gcc)合并成单一步骤,但ccache只对纯编译阶段生效——链接阶段不会产生可缓存的编译产物,所以必须让Bjam拆分这两个流程,才能让ccache发挥作用。
具体配置步骤
1. 给GCC工具集注入ccache
在你的user-config.jam(全局配置)或者项目根目录的Jamfile(项目级配置)里,添加自定义GCC工具集:
using gcc : ccache : ccache g++ ;
这里用ccache g++替换了默认的g++命令,让所有编译请求先经过ccache处理。
2. 强制Bjam拆分编译与链接
Bjam只有在链接多个目标文件时才会自动拆分流程,单文件编译时可能还是会合并。你可以用两种方式确保拆分:
方式一:显式拆分编译、链接步骤
不要直接用exe规则一步生成可执行文件,先编译成.o目标文件,再单独链接:
# 第一步:编译源文件为目标文件 obj main.o : main.cpp ; # 第二步:链接目标文件生成可执行文件 exe my_app : main.o ;
方式二:全局强制拆分
在配置文件开头加一行,给链接阶段加一个无意义的选项,迫使Bjam单独执行链接:
flags gcc.link LINKFLAGS : -Wl,--start-group ;
这个选项不会影响链接结果,但会让Bjam认为链接需要独立步骤。
3. 验证配置是否生效
运行Bjam时加上-d+2查看详细命令输出:
bjam -d+2 toolset=gcc-ccache
如果看到编译命令是ccache g++ -c main.cpp -o main.o,链接命令是g++ main.o -o my_app,说明配置成功,ccache已经在编译阶段工作了。
额外优化
- 设置环境变量指定ccache缓存目录,避免默认目录的权限问题:
export CCACHE_DIR=$HOME/.ccache - 开启缓存压缩节省磁盘空间:
export CCACHE_COMPRESS=true
内容的提问来源于stack exchange,提问作者eL.
相关产品推荐
相关产品推荐

