在我的bazelBUILD
文件中,有一行:
srcs = glob([<pattern1>, <pattern2>, ...])
我尝试使用一种模式,"../dir/*.cc"
但出现一个错误,不允许在..
这里使用该序列。
查看文档,我发现这是不允许的,但是我不确定预期的替代品是什么。
同样,禁止使用上级引用(..)和当前目录引用(./)。
srcs
给定当前文件结构,如何将这些其他源文件包括在列表中?如果无法引用上级目录,是否可以使用其他目录的软件包名称代替?
从BUILD
文件中“向上”将违反程序包边界。如果您确实需要该结构并且不能或不想更改它,则必须通过声明相应的目标或至少导出文件并使它们可见来使一个包中的文件可用于另一包。例如,假设以下结构:
.
├── BUILD
├── WORKSPACE
├── hello.c
└── tgt
└── BUILD
它的//
(顶级)封装,BUILD
我可以说:
filegroup(
name = "hello",
srcs = ["hello.c"],
visibility = ["//tgt:__pkg__"],
)
(也可能是:exports_files(["hello.c"], ["//tgt:__pkg__"])
相反,在这种情况下,我将使用的文件名//:hello.c
来引用该文件tgt
。)
在//tgt
(tgt/BUILD
)内部,它可以读取:
cc_binary(
name="tgt",
srcs=["//:hello"],
)
这会给我:
$ bazel run //tgt
WARNING: /tmp/bzl1/tgt/BUILD:3:10: in srcs attribute of cc_binary rule //tgt:tgt: please do not import '//:hello.c' directly. You should either move the file to this package or depend on an appropriate rule there
INFO: Analyzed target //tgt:tgt (11 packages loaded, 68 targets configured).
INFO: Found 1 target...
Target //tgt:tgt up-to-date:
bazel-bin/tgt/tgt
INFO: Elapsed time: 0.247s, Critical Path: 0.09s
INFO: 2 processes: 2 linux-sandbox.
INFO: Build completed successfully, 6 total actions
INFO: Build completed successfully, 6 total actions
Hello World!
注意:bazel仍将其标记为奇怪且值得注意的事情。我必须说我不同意。树形结构似乎与内容不太吻合。
也许在此示例中,tgt
包边界是人为的,实际上没有用吗?还是hello.c
在错误的地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句