Bazel 中的上层引用(“..”)

Apo*_*ica 10 bazel

在我的 bazelBUILD文件中,有一行:

srcs = glob([<pattern1>, <pattern2>, ...])
Run Code Online (Sandbox Code Playgroud)

我试图让我的模式之一成为,"../dir/*.cc"但出现错误,不允许我..在此处使用该序列。

检查文档,我发现这是不允许的,但我不确定预期的替代品是什么。

同样,禁止上级引用 (..) 和当前目录引用 (./)。

考虑到我当前的文件结构,如何将这些其他源文件包含在我的srcs列表中?如果我无法引用上层目录,有没有办法使用其他目录的包名来代替?

Ond*_* K. 9

从文件“向上”BUILD会违反包边界。如果您确实需要该结构并且不能或不想更改它,则必须通过声明相应的目标或至少导出文件并使这些文件可见,使一个包中的文件可供另一包使用。例如假设以下结构:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 BUILD\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WORKSPACE\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 hello.c\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tgt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 BUILD\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以说它是//(顶级)包:BUILD

\n\n
filegroup(\n    name = "hello",\n    srcs = ["hello.c"],\n    visibility = ["//tgt:__pkg__"],\n)                      \n
Run Code Online (Sandbox Code Playgroud)\n\n

(也可能是:相反,在这种情况下,我会通过文件名来exports_files(["hello.c"], ["//tgt:__pkg__"])引用该文件。)//:hello.ctgt

\n\n

//tgt( tgt/BUILD) 里面可以读到:

\n\n
cc_binary(\n    name="tgt",\n    srcs=["//:hello"],\n)                                                                                                                                              \n
Run Code Online (Sandbox Code Playgroud)\n\n

这会给我:

\n\n
$ bazel run //tgt\nWARNING: /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\nINFO: Analyzed target //tgt:tgt (11 packages loaded, 68 targets configured).\nINFO: Found 1 target...\nTarget //tgt:tgt up-to-date:\n  bazel-bin/tgt/tgt\nINFO: Elapsed time: 0.247s, Critical Path: 0.09s\nINFO: 2 processes: 2 linux-sandbox.\nINFO: Build completed successfully, 6 total actions\nINFO: Build completed successfully, 6 total actions\nHello World!\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:bazel 仍然将其标记为奇怪且值得注意的事情。我不得不说我并不同意这一点。树形结构似乎与内容不太对应。

\n\n

也许在这个例子中tgt包边界是人为的并且实际上没有用?或者hello.c是在错误的地方。

\n