何时在Bazel中为BUILD文件(* .BUILD)加上前缀

时间:2019-10-28 15:07:51

标签: bazel

Bazel在其C ++单元测试教程中建议将根级别gtest.BUILD文件添加到工作区根目录,以便将Google Test正确集成到测试项目中。

https://docs.bazel.build/versions/master/cpp-use-cases.html

为什么要创建一个新的BUILD文件并向其添加gtest前缀,而不是向工作空间中的现有BUILD文件添加新的构建规则?只是次要的风格偏好吗?

1 个答案:

答案 0 :(得分:3)

因为如果您在工作区的某个地方(例如,在import subprocess def delete_first_lines(filename, line_nums): n = '1,{}d'.format(line_nums) subprocess.Popen(['sed', '-i', n, filename ], stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) 下)添加了一个BUILD文件,那么该文件将在其中创建一个程序包。

然后,如果您在该BUILD文件中声明了目标,则它们的文件将存在于// third_party / gtest下,还是存在于http_archive下载的zip文件中?如果是前者,则不需要http_archive,因为文件已经在源树中了。如果是后者,则BUILD文件将在其自己的程序包中引用不存在的文件。两种情况都有缺陷。

最好将gtest的BUILD文件称为不会创建包的东西,但这只是其目的的描述。

//third_party/gtest/BUILD的{​​{1}}属性可以引用任何文件,不需要名称。名称build_file主要是样式,是的,但是它也避免了在不应该创建的包的情况下避免使用。您可以说这是一个“非活动” BUILD文件,当Bazel下载http_archive并将其解压缩到某个位置并在该目录中创建一个名为BUILD的符号链接时,该文件将处于“活动”状态,该链接指向http_archive

拥有这种“非活动” BUILD文件的另一个优点是,对于多个http_archive,您可以在一个程序包中包含多个文件。