【问题标题】:How can I find all source files included in multiple bazel targets?如何找到多个 bazel 目标中包含的所有源文件?
【发布时间】:2023-03-28 09:34:02
【问题描述】:

在我的代码库中,在多个目标(cc_binarycc_library 等)中包含相同的源文件通常是错误的。我想检测一下。

我可以的

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

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

如果我可以查询一个源文件属于哪个目标并查看它是否是多个目标的源,那将会更容易/更清晰。这可能吗?

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

【问题讨论】:

    标签: bazel


    【解决方案1】:

    几个澄清问题:

    • 您希望以什么频率检测这种情况? (即,您希望将此作为测试运行,还是手动验证?)
    • 如果两个不相关的目标 A 和 B 都依赖于文件 foo,即使 A 不依赖于 B,B 也不依赖于 A,是否会被视为错误?
    • 限制 src 对同一包中定义的目标的可见性是否不够?例如,考虑确保foo/bar/src.c 仅对foo/bar/BUILD 中定义的目标可见,然后确保foo/bar/BUILD 仅包含一个cc_library 目标。

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

    如果你真的很喜欢使用bazel query,你可以通过调用来获得项目下每个目标的完整列表,例如,

    bazel query //...
    

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2021-04-18
      • 2010-10-10
      • 1970-01-01
      相关资源
      最近更新 更多