Bazel在其C ++单元测试教程中建议将根级别gtest.BUILD
文件添加到工作区根目录,以便将Google Test正确集成到测试项目中。
https://docs.bazel.build/versions/master/cpp-use-cases.html
为什么要创建一个新的BUILD文件并向其添加gtest
前缀,而不是向工作空间中的现有BUILD文件添加新的构建规则?只是次要的风格偏好吗?
答案 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,您可以在一个程序包中包含多个文件。