data_runfiles
sind die Dateien, die den Runfiles einer Binärdatei hinzugefügt werden, die von der Regel über das Attribut data
abhängt. default_runfiles
sind die Dateien, die zu den Runfiles einer Binärdatei hinzugefügt werden, die von der Regel über alles andere als das data
-Attribut abhängt. runfiles
sind eine Abkürzung für die Erstellung einer DefaultInfo
, die den gleichen Satz von Dateien wie die data_runfiles
und default_runfiles
hat.
Betrachten Sie das folgende Beispiel mit der filegroup
Regel. (Ich bin nicht ganz sicher, warum filegroup
Sorgen, ob es über das data
Attribut verwiesen wird, aber es funktioniert, und es macht ein einfaches Beispiel.)
# BUILD
filegroup(
name = "a",
srcs = ["b"],
data = ["c"],
)
sh_binary(
name = "bin1",
srcs = ["bin.sh"],
deps = [":a"],
)
sh_binary(
name = "bin2",
srcs = ["bin.sh"],
data = [":a"],
)
# bin.sh
ls
Wir diese Datei finden in den runfiles von b
:bin2
ist aber nicht :bin1
.
$ bazel run //:bin1
bin1
bin.sh
c
$ bazel run //:bin2
b
bin2
bin.sh
c
können nun einen Blick auf die default_runfiles
und data_runfiles
direkt haben.
# my_rule.bzl
def _impl(ctx):
print(ctx.attr.dep.default_runfiles.files)
print(ctx.attr.dep.data_runfiles.files)
my_rule = rule(
implementation = _impl,
attrs = {"dep": attr.label()},
)
# BUILD
load("//:my_rule.bzl", "my_rule")
my_rule(name = "foo", dep = ":a")
$ bazel build //:foo
WARNING: /usr/local/google/home/ajmichael/playgrounds/runfiles/my_rule.bzl:2:3: depset([File:[/usr/local/google/home/ajmichael/playgrounds/runfiles[source]]c]).
WARNING: /usr/local/google/home/ajmichael/playgrounds/runfiles/my_rule.bzl:3:3: depset([File:[/usr/local/google/home/ajmichael/playgrounds/runfiles[source]]b, File:[/usr/local/google/home/ajmichael/playgrounds/runfiles[source]]c]).
INFO: Found 1 target...
Target //:foo up-to-date (nothing to build)
INFO: Elapsed time: 0.194s, Critical Path: 0.00s
Wie Sie sehen können, default_runfiles
enthält nur c
während data_runfiles
sowohl b
und c
enthält.