如果编译 AOSP/CM 被中断会发生啥
Posted
技术标签:
【中文标题】如果编译 AOSP/CM 被中断会发生啥【英文标题】:What happens if compiling AOSP/CM is interrupted如果编译 AOSP/CM 被中断会发生什么 【发布时间】:2014-11-24 18:42:17 【问题描述】:我有两个猜测:
它从一开始就编译,但使用 CCACHE 更快
通过检测已编译的模块继续进行
如果我清除 CCACHE 而不是 OUT 目录会发生什么?是继续还是重启?
【问题讨论】:
【参考方案1】:这里有多个层次。
在顶层,您有一个(至少这是我简要了解构建系统后的印象)一个make-system(或类似的东西)。通过调用命令构建特定的“目标”。如果目标已经存在并且是最新的(它所基于的源文件不比创建的目标新),make 将不会调用任何命令 make 可以调用的一个命令是编译命令(可选前缀为“ccache”)。如果调用了以 ccache 为前缀的命令,ccache 将检查其缓存目录以查看是否有任何可以重用的内容。如果有东西可用,ccache 将简单地将文件从其缓存复制到所需位置。如果没有可用的内容,ccache 将调用编译器命令(然后用结果填充其缓存)。如果您清除 ccache 缓存目录,则意味着 make 'targets' 仍然存在并且是最新的。这意味着 make 将决定这些目标不需要重新编译。换句话说:它将继续,而不是重新启动。 Ccache 甚至还没有出现在这一点上。
【讨论】:
说有 100 个目标,它的 #20 编译错误,因为它被强制关闭。当我再次运行时,它应该跳到 20,然后它会意识到它没有正确编译(或者它会意识到?)然后它会再次编译它。它会使用CCACHE再次编译吗?或者不是因为 CCACHE 来自损坏的版本? 如果你中断编译,(通常)不应该有#20的输出文件。结果,make 将再次调用该命令。 Ccache 将运行并检查其缓存。如果缓存为空,将调用编译器(之后,目标文件将存储在 ccache 缓存中)。以上是关于如果编译 AOSP/CM 被中断会发生啥的主要内容,如果未能解决你的问题,请参考以下文章
使用 CMake 和 c++ 编译时,如果两个头文件名称相同,会发生啥情况?