2016-04-30 1 views
1

Mon projet la structure suivante:Erreur avec plusieurs fichiers CONSTRUIRE Bazel: " 'bar' Target n'est pas visible de la cible 'foo'"

$ tree 
. 
├── bar 
│   ├── bar.cpp 
│   └── BUILD 
├── BUILD 
├── foo.cpp 
└── WORKSPACE 

Contenu de ./BUILD:

cc_binary(
    name = "foo", 
    srcs = [ "foo.cpp" ], 
    deps = [ "//bar" ], 
) 

Contenu de bar/BUILD:

cc_library(
    name = "bar", 
    srcs = ["bar.cpp"], 
) 

Si je construis foo, je reçois le texte suivant err ou:

Target '//bar:bar' is not visible from target '//:foo'. Check the visibility declaration of the former target if you think the dependency is legitimate. 

Que dois-je faire la dépendance peut être résolu et foo est construit avec succès?

Répondre

4

De l'Bazel docs:

However, by default, build rules are private. This means that they can only be referred to by rules in the same BUILD file. [...] You can make a rule visibile to rules in other BUILD files by adding a visibility = level attribute.

Dans ce cas, bar/BUILD devrait se présenter comme suit:

cc_library(
    name = "bar", 
    srcs = ["bar.cpp"], 
    visibility = ["//__pkg__"], 
) 

La ligne supplémentaire visibility = ["//__pkg__"] permet à tous les fichiers BUILD dans la zone de travail en cours d'accéder à la cible bar.