有没有办法在Bazel中指定可选的依赖项?
我想制定一个规则来反映Kitware的ExternalData,但我想看看我是否可以启用开发人员在树中编辑文件的工作流程,理想情况下没有需要修改BUILD
文件。
external_data
,该规则可以在给定SHA-512的情况下从给定服务器获取文件。我想这样做,以便Bazel可以在文件存在与否之间切换,并且对于缓存的误报是健壮的。我想避免的一个示例场景,如果我不将其作为可选依赖项包含它:
对我来说,如果我试图实现一个 repository_rule
rule
来手动检查文件的存在,并且有条件地执行(我不确定分析是否会重新触发此规则"评估"如果步骤2发生。)。
我目前对替代工作流程的想法是为external_data
,use_workspace
提供明确的选项:if False
,它会下载文件;如果True
,它只会镜像exports_files([])
。然后开发人员可以在修改文件时设置它。
(理想情况下,我希望可选包含一个指示SHA(${file}.sha512
)的文件,但这似乎又回到原来的问题。)
答案 0 :(得分:0)
一种解决方法是使用Bazel的glob(...)
方法来有效地检查文件是否存在。
如果您有一个文件,比如basic.bin.sha512
,并且您希望规则根据该文件的存在来切换模式,则可以使用glob(["basic.bin.sha512"])
,它将与包文件完全匹配或返回空列表。
我曾经在更大的文件集上使用它,并且看起来很有效。但是,就目前而言,我错误地为目标定义采用了一种明确的“开发”模式,以保持Bazel构建相对一致,无论可以检出哪些文件。
以下是一个示例用法: