使用arm-none-eabi-gcc交叉编译时,如何让ccache忽略nano.specs?
使用arm-none-eabi-gcc交叉编译时,需要添加-specs=nano.specs参数,但该操作导致ccache无法正常工作,日志报错如下:
[2024-01-24T10:36:58.306578 191738] Failed to lstat nano.specs: No such file or directory
[2024-01-24T10:36:58.306581 191738] While processing -specs=nano.specs: nano.specs is missing
[2024-01-24T10:36:58.306602 191738] Failed; falling back to running the real compiler
尝试在-specs=nano.specs前添加--ccache-skip参数但无效,询问如何让ccache忽略nano.specs文件的检查。
以下几种方法可解决该问题:
1. 使用nano.specs的绝对路径
ccache找不到nano.specs通常是因为文件不在当前工作目录或默认搜索路径中。先通过命令定位文件实际位置:
find / -name nano.specs 2>/dev/null
假设找到的路径为/usr/lib/gcc/arm-none-eabi/12.3.1/nano.specs,将编译参数修改为绝对路径形式:
arm-none-eabi-gcc -specs=/usr/lib/gcc/arm-none-eabi/12.3.1/nano.specs ...
这样ccache能准确定位到文件,不会触发找不到文件的错误。
2. 通过CCACHE_IGNORE_ARGS忽略该参数
设置环境变量CCACHE_IGNORE_ARGS,让ccache在处理编译参数时跳过对-specs=nano.specs的检查:
export CCACHE_IGNORE_ARGS="-specs=nano.specs"
若有多个需要忽略的参数,可用逗号分隔:
export CCACHE_IGNORE_ARGS="-specs=nano.specs,-specs=other.specs"
设置后,ccache会跳过该参数的存在性检查,直接调用真实编译器处理。
3. 写入ccache配置文件持久生效
如果不想每次编译都手动设置环境变量,可将配置写入ccache的全局配置文件(通常为~/.ccache/ccache.conf):
CCACHE_IGNORE_ARGS = -specs=nano.specs
保存配置后,ccache会自动应用该规则。
内容的提问来源于stack exchange,提问作者Florian Loitsch

