Bazel 有没有办法在genrule的路径中包含一个带有bang(!)的文件?
我有一个iOS框架,它依赖于(大概是谷歌维护的)pod,名为“!“原型编译器”。为了构建我的框架,我需要在沙箱中使用它。因此,我有一个genrule,可以尝试将其包含在Bazel 有没有办法在genrule的路径中包含一个带有bang(!)的文件?,bazel,Bazel,我有一个iOS框架,它依赖于(大概是谷歌维护的)pod,名为“!“原型编译器”。为了构建我的框架,我需要在沙箱中使用它。因此,我有一个genrule,可以尝试将其包含在 src=glob(['Pods/!ProtoCompiler/***'))但我得到以下错误: 错误:BUILD:2:1://Foo:framework调试:无效标签'Pods/!“genrule”规则中属性“srcs”的元素1118中的ProtoCompiler/google/protobuf/any.proto:目标名称“Po
src=glob(['Pods/!ProtoCompiler/***'))
但我得到以下错误:
错误:BUILD:2:1://Foo:framework调试:无效标签'Pods/!“genrule”规则中属性“srcs”的元素1118中的ProtoCompiler/google/protobuf/any.proto:目标名称“Pods/”无效!ProtoCompiler/google/protobuf/any.proto':目标名称不能包含“!”
就目前而言,这似乎是一个完全阻止我使用bazel做这个构建。据我所知,我没有能力重命名pod目录。据我所知,这是一场灾难!禁令应该是针对目标标签的,我有没有办法指定这只是一个文件,而不是标签?还是这两个概念在bazel中完全融合了
(另外,如果我让它工作起来,我担心这样会生成一个.framework目录,而且规则似乎只会生成文件。也许我会将其压缩,然后作为测试工具构建的一部分将其解压缩。)
据我所知,这是一场灾难!禁令应该是针对目标的
标签,有没有办法指定这只是一个文件,而不是
标签?还是这两个概念在bazel中完全融合了
它们大多是模制的
Bazel将一个标签与包中出现在生成文件中的所有源文件相关联,这样您就可以在生成规则中编写srcs=[“foo.cc”,““//bar:baz.cc”]
,无论foo.cc
和baz.cc
是源文件还是生成的文件,或者生成适合此特定srcs
属性的文件的生成规则名称
也就是说,包中当然可以有任何文件,但是如果名称不允许Bazel从中派生标签,那么就不能在构建文件中引用它们。由于glob
在加载过程中进行评估,并扩展为标签列表,因此使用glob
无法绕过此限制
(…)规则似乎只需要生成文件。大概
作为测试构建的一部分,我将对其进行压缩,然后将其解压
挽具
是的,这是通常的方法。谢天谢地,这些吊舱在构建时不需要,所以我想我躲过了这一劫。不过,我还是很想知道是否有答案。将bazel包/目标规则应用于项目中的所有文件路径似乎是错误的。您所说的“包中可以有任何文件”是指包含生成文件的目录可以包含您喜欢的任何名称的文件吗?我很感激这不会使bazel崩溃,但是为了在bazel build中执行任何操作,您必须在某个地方引用构建文件中的文件,不是吗?您在这两个方面都是正确的。是的,这就是我的意思——仅仅在Bazel无法使用的包中包含文件并不会使Bazel崩溃或使其无法运行,这是非常基本的,但我还是想指出这一点。唉,要使这些文件变得有用,您确实需要以某种方式引用它们。