Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bazel 有没有办法在genrule的路径中包含一个带有bang(!)的文件?_Bazel - Fatal编程技术网

Bazel 有没有办法在genrule的路径中包含一个带有bang(!)的文件?

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

我有一个iOS框架,它依赖于(大概是谷歌维护的)pod,名为“!“原型编译器”。为了构建我的框架,我需要在沙箱中使用它。因此,我有一个genrule,可以尝试将其包含在

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崩溃或使其无法运行,这是非常基本的,但我还是想指出这一点。唉,要使这些文件变得有用,您确实需要以某种方式引用它们。