为什么 Google's Bazel 会出于与代码无关的原因(例如重新启动系统或更改无线网络)强制重建 C++?即使代码没有改变,代码也会被重建。在其他一些(较差的?)构建系统中,无线网络不会影响依赖图。
换个方式问:是否所有构建系统,比如Microsoft Visual Studio,在构建代码之前也要检查无线网络和机器的正常运行时间吗?
以第三种方式提问:在依赖图中还应该考虑哪些其他环境因素?防病毒签名?谷歌浏览器版本?您上次收到 Facebook 消息是什么时候?
最佳答案
如果不能证明重用以前的结果是安全的,那么有很多事情会导致 Bazel 保守地重建软件。
这些主要是 1) 声明为 Action 输入的文件(这可以包括编译器等工具),2) 使用的命令行,以及 3) 传递给 Action 的环境变量。
Bazel 当前默认将一些环境变量从您的本地机器转发到所有操作,包括 PATH、LD_LIBRARY_PATH 和 TMPDIR - 这是一个错误(请参阅 https://github.com/bazelbuild/bazel/issues/2574 )。
此外,Bazel 支持“标记”,它将用户名、主机名和当前时间等信息嵌入到二进制文件中。默认情况下,对构建期间使用的二进制文件禁用标记 - 这些是为我们所谓的“主机配置”构建的。
可能出错的事情:
编辑:您也有可能在 Bazel 中发现了一个实际错误,例如 Bazel 在某些方面是不确定的,并且由于当前键与前一个条目不完全匹配而导致缓存未命中。
关于c++ - 为什么在重新启动或更改无线网络后 Bazel 会重建?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46674110/