声明包含源C ++编译动作失效

时间:2017-06-12 08:31:52

标签: bazel

(来自https://groups.google.com/d/msg/bazel-discuss/HEpui0DLvnA/RzuwICDmBgAJ

如果已被小组/开发小组提出并回答,请原谅我。

"声明的列表包括来源" files是C ++编译的操作键的一个组件。

这意味着向cc_ *目标的srcs或hdrs添加头扩展文件会导致所有编译操作失效,这些操作可以看到声明的列表内容(在hdrs情况下,传递)。

当包括修剪应该为编译提供最小的可能失效源集合时,有人可以解释这是如何必要的吗?

2 个答案:

答案 0 :(得分:2)

声誉阻止我评论您的答案,重新发布意味着我不拥有该问题,但问题不仅仅是“重新验证”:

声明的包含源是传递性的,导致依赖目标中的所有编译的动作失效和重新执行(不仅仅是重新验证,其定义对我来说最模糊)。

这篇文章的重点是讨论(因此是bazel-讨论)是否有任何方式可以通过添加(不讨论删除)的定义来影响以前编译的输出。头文件,不更改与先前编译相关的任何源。输入集(可能已被修剪以匹配使用的头文件)应该(必须)足够准确地描述动作重新执行的唯一可能触发器。任何编译依赖于新添加的头的容量都是nil,而不会进一步更改操作输入集的实际内容。

答案 1 :(得分:0)

当规则的定义发生变化时(将文件添加到srcs / hdrs),Bazel必须假定更改可能会影响编译结果,即使其他文件都没有更改。 (例如,您刚刚添加了之前缺少的标题。)

如果重建目标Bazel重新运行编译操作。如果该对象(目标文件)的输出与Bazel上次执行操作的输出相同,则它将重新验证下游操作而不重新执行它们。