c – 如何将漂亮的印刷作为构建在bazel中的一部分进行整合

现在,我有一个非常愚蠢的漂亮的打印脚本,它有点git-fu来查找格式化(无条件)然后通过clang-format -i运行它们.这种方法有几个缺点:

>某些文件非常庞大,需要永久印刷.
>无论基础文件是否实际发生变化,始终都会进行漂亮的打印.

在过去,我能够用CMake做一些具有几个不错的属性的东西,我想在bazel中重现:

>只有在经过linting /漂亮打印等之后才构建代码.
>只有lint /漂亮的打印/等等已经改变的东西
>漂亮的印刷品,无论它是否在VC下

在CMake-land中,我使用了这个策略,受SCons代理目标技巧的启发:

>引入虚拟目标(例如source – > source.formatted).与此目标关联的操作有两个作用:a)运行clang-format -i source,b)输出/触摸名为source.formatted的文件(这保证了对于合理的文件系统,如果source.formatted比源更新,则源不需要重新格式化)
>添加一个虚拟目标(target_name.aggregated_formatted),它聚合与特定库/可执行目标源相对应的所有.formatted文件
>使库/可执行目标依赖于target_name.aggregated_formatted作为预构建步骤

任何帮助将不胜感激.

解决方法:

您可能可以使用方面.如果确实有可能,Bazel-dev可能会指出这一点.

如果您熟悉规则和操作等,快速而肮脏的方式(类似于CMake hackery)就是编写一个宏.对于例如cc_library你会这样做:

def clean_cc_library(name, srcs, **kwargs):
  lint_sources(
      name = "%s_linted" % name,
      srcs = srcs,
  )

  pretty_print_sources(
      name = "%s_pretty" % name,
      srcs = ["%s_linted"],
  )

  return native.cc_library(
    name = name,
    srcs = ["%s_pretty"],
    **kwargs
  ) 

那么你当然需要用clean_cc_library替换每个cc_library. lint_sources和pretty_print_sources是你必须自己实现的规则,需要生成清理文件列表.

上一篇:Android OpenCV(四十一),androidapp开发入门与项目实战


下一篇:Android防止快速连续点击跳转