如何集成漂亮打印作为在bazel中构建的一部分
问题描述:
现在,我有一个非常愚蠢的漂亮打印脚本,它会做一些git-fu来查找文件来格式化(无条件地),然后通过clang格式运行它们-一世。这种方法有几个缺点:如何集成漂亮打印作为在bazel中构建的一部分
- 有某些文件是巨大的,永远漂亮打印。
- 漂亮的打印总是完成,无论基础文件是否实际更改。
在过去,我能够做CMake的事情,有几个不错的性能,我想在巴泽尔重现:后
- 永远只能建立代码它已经通过掉毛了/漂亮的打印/等
- 只有皮棉/漂亮的打印/等东西已经改变
- 打印出更漂亮的东西,无论它是否是VC下或不
在CMake的土地中,我使用这种策略,通过使用SCons代理目标诡计启发:
介绍一个虚拟的目标(例如源 - > source.formatted)。与这个目标关联的动作做了两件事:a)运行clang-format -i源代码,b)输出/触摸一个名为source.formatted的文件(这保证对于合理的文件系统,如果source.formatted比source更新,并不需要重新格式化)
添加它汇集所有的对应一个特定的库/可执行目标的来源.formatted文件虚拟的目标(target_name.aggregated_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
是您必须自行实施并需要生成清理文件列表的规则。