如何查找多个bazel目标中包含的所有源文件?

时间:2018-06-13 19:56:31

标签: bazel

在我的代码库中,将相同的源文件包含在多个目标(cc_binarycc_library等)中通常是错误的。我想发现这个。

我能做到

bazel query labels(srcs, //target:name)

获取单个目标的源列表。这足以足以确定哪些源是多个目标的一部分,通过对每个目标执行此操作并检测哪些源文件位于多个目标中。但我仍然需要一个查询来获取每个目标的列表。

如果我只能查询源文件所属的目标并查看它是否是多个目标的来源,那将会更容易/更清洁。这可能吗?

另外,我有一个很多的源文件,查询的最佳性也是一个问题。

1 个答案:

答案 0 :(得分:2)

一些澄清问题:

  • 您想以什么频率检测这种情况? (即您希望将此运行作为测试,还是要手动验证?)
  • 如果两个不相关的目标A和B都依赖于文件foo,即使A不依赖于B,B也不依赖于A,它被认为是错误吗?
  • 是否不足以将src可见性限制为在同一个包中定义的目标?例如,请考虑确保case 3: { if(strcmp(token, "\x97\x97\x97") == 0) strcpy(registro[i].trecho, NULL); else strcpy(registro[i].trecho, token); break; } 仅对foo/bar/src.c中定义的目标可见,然后确保foo/bar/BUILD仅包含一个foo/bar/BUILD目标。

考虑使用aspects获取给定目标的所有传递源文件的列表。

如果您真正依赖于使用cc_library,您可以通过调用,例如

获取项目下每个目标的完整列表
bazel query