我有两个猜测:
它从一开始就编译,但使用 CCACHE 的速度要快得多
它继续,通过检测哪些模块已被编译
如果我清除 CCACHE 但不清除 OUT 目录会发生什么?它会继续还是重新启动?
这里有多个层很重要。
- 在顶层,你有(至少这是我简要查看构建系统的印象)一个制作系统(或类似的东西)。通过调用命令使构建特定的"目标"。如果目标已经存在并且是最新的(它所基于的源文件不比创建的目标新),则 make 将不会调用任何命令
- make可以调用的一个命令是编译命令(可选地以"ccache"为前缀)。如果调用了以 ccache 为前缀的命令,ccache 将检查其缓存目录,看看是否有任何可以重用的内容。如果有可用的内容,ccache 将简单地将文件从其缓存复制到所需位置。如果没有可用的内容,ccache 将调用编译器命令(并在之后用结果填充其缓存)。
如果清除 ccache 缓存目录,则意味着 make "目标"仍然存在并且是最新的。这意味着 make 将决定不需要对这些目标进行重新编译。换句话说:它将继续,而不是重新启动。在这一点上,Ccache 甚至还没有出现。