build_always_stale 的确切语义?

Exact semantics of build_always_stale?

似乎每当 build_always_stale: true 目标被重建时,它也被假定为被重建 改变了 ,即使输出文件实际上是 bit-for -位不变。这会导致目标 depending on the build_always_stale target 每次都被重建。这是build_always_stale语义的一部分吗?

我以为build_always_stale就是"we don't know how to determine whether this target is up to date, so please always rebuild it just in case"的意思,不过好像还包括"and please consider the result to be always changed even if it isn't"?

Is this part of the semantics of build_always_stale?

这取决于底层构建系统。最后,meson 只是确保目标始终被重建,无论如何。


ninja后端为例,特别看一下其源代码中的generate_custom_target函数,您会看到:

if target.build_always_stale:
    deps.append('PHONY')

这意味着,如果自定义目标被标记为始终陈旧,meson 将告诉 ninja 添加 PHONY 作为其依赖项。

在那种情况下,ninja 将始终假定目标已过时,因此所有 附属物也已过时。