2017-05-12 3 views

Antwort

4

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.

Verwandte Themen