在我的 bazelBUILD文件中,有一行:
srcs = glob([<pattern1>, <pattern2>, ...])
Run Code Online (Sandbox Code Playgroud)
我试图让我的模式之一成为,"../dir/*.cc"但出现错误,不允许我..在此处使用该序列。
检查文档,我发现这是不允许的,但我不确定预期的替代品是什么。
同样,禁止上级引用 (..) 和当前目录引用 (./)。
考虑到我当前的文件结构,如何将这些其他源文件包含在我的srcs列表中?如果我无法引用上层目录,有没有办法使用其他目录的包名来代替?
从文件“向上”BUILD会违反包边界。如果您确实需要该结构并且不能或不想更改它,则必须通过声明相应的目标或至少导出文件并使这些文件可见,使一个包中的文件可供另一包使用。例如假设以下结构:
.\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\nRun Code Online (Sandbox Code Playgroud)\n\n我可以说它是//(顶级)包:BUILD
filegroup(\n name = "hello",\n srcs = ["hello.c"],\n visibility = ["//tgt:__pkg__"],\n) \nRun Code Online (Sandbox Code Playgroud)\n\n(也可能是:相反,在这种情况下,我会通过文件名来exports_files(["hello.c"], ["//tgt:__pkg__"])引用该文件。)//:hello.ctgt
在//tgt( tgt/BUILD) 里面可以读到:
cc_binary(\n name="tgt",\n srcs=["//:hello"],\n) \nRun 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!\nRun Code Online (Sandbox Code Playgroud)\n\n注意:bazel 仍然将其标记为奇怪且值得注意的事情。我不得不说我并不同意这一点。树形结构似乎与内容不太对应。
\n\n也许在这个例子中tgt包边界是人为的并且实际上没有用?或者hello.c是在错误的地方。
| 归档时间: |
|
| 查看次数: |
5317 次 |
| 最近记录: |