Bazel 依赖关系理解

Dependencies:

     在构建或者执行时,目标A依赖于目标B,这种依赖关系产生一个有向无环图,我们将这种有向无环图称为依赖图,一个目标的直接依赖关系指的是在依赖图中可以以1步到达依赖对象的关系,二传递依赖关系指的是需要经过数步才能到达依赖对象的关系。

     事实上在构建的上下文中,有两种依赖关系,实际依赖关系和声明依赖关系。两者差别极小。实际依赖关系指的是构建或者执行的时候A需要B,而声名依赖关系仅仅是在包A中有从A到B的一条依赖线。

    为了确保构建的正确性,实际依赖关系A必须是声名依赖关系的子图,也就是说,每一个在A中的直接依赖关系对x--->y,必须也是D中的直接依赖关系对。

    在a、b、c三个个字包含了BUILD文件的三个包中,a依赖b,b依赖c,比如下图:

      Bazel 依赖关系理解

其中的声明依赖关系为:deps:a-->b;b-->c;

实际依赖关系为:各自srcs的目标文件中的import 及相应的函数的表征:a-->b;b-->c;

三种常见的构建规则的依赖关系类型:

1、srcs依赖:也就是BUILD文件中规则的属性Srcs的值,他表示构建该规则时使用的程序代码;

2、deps依赖:也就是规则中的deps属性的值,表示构建规则时所需要的头文件等;

3、data依赖:它不是代码,只是构建规则时需要的数据;

构建系统在一个独立的目录中进行测试,该目录中仅仅只有命名为data的文件可视,因此,需要测试时,需要声明数据为data文件;

注:您不应将目录指定为构建系统的输入,而应明确或使用该glob()函数枚举其中包含的文件集 **用于强制递归。)