Ich bin neu in Bazel, und ich bin ein Versager immer meine C++ Paket mitWie bazel "undeclared inclusion (s)" Fehler beheben?
ERROR: /path/to/package/BUILD:linenumber:1 undeclared inclusion(s) in rule '//path/to/package:name': this rule is missing dependency declarations for the following files included by 'path/to/package/source_file.cpp'
... durch eine Liste von Header-Dateien in einem anderen Verzeichnis gefolgt zu bauen. Diese Dateien sind nicht Teil des Pakets, das erstellt wird, aber von woanders her eingezogen werden.
Meine Frage ist, wie Sie die Deklaration ordnungsgemäß zur BUILD-Datei hinzufügen, um den Fehler zu beheben?
Laut der Online-Bazel Doku here sollte ich jeden Header an den SRCs Liste hinzufügen. (Um es klar, sind diese Header, die intern von der Bibliothek verwendet werden, ich baue und nicht Teil der öffentlichen Schnittstelle, so dass sie gehören nicht in hdrs.) Aber wenn ich versuche, dass
srcs = [ ..., "path/to/dependent/headers/header.h",]
ich erhalte eine Fehlermeldung
ERROR: ... crosses boundary of subpackage ... (perhaps you meant to put the colon here: ...?)
, weil das Verzeichnis mit den Header kein Paket Bazel ist.
Wenn ich versuche, die endgültige/zu einem Doppelpunkt zu ändern, wie die Fehlermeldung,
srcs = [ ..., "path/to/dependent/headers:header.h",]
schlägt dann
ERROR: ... target names may not contain ':'.
Die Bazel C++ Tutorial here, im Abschnitt "Zusätzliche Include Paths", sagt Diese externen Include-Verzeichnisse sollten über Copts:
cc_library(
name = "some_lib",
srcs = ["some_lib.cc"],
hdrs = ["some_lib.h"],
copts = ["-Ithird_party/some_lib"],
)
deklariert werden
Aber hinzufügen, dass -I Flag tut nicht git loszuwerden der "undeclared Aufnahme (n)" Fehler!
$ bazel version
Build label: 0.4.3
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Thu Dec 22 12:31:25 2016 (1482409885)
Build timestamp: 1482409885
Build timestamp as int: 1482409885
Danke, @ kristina. Also, der Trick ist, ich muss den Drittanbieter-Source-Tree ändern, um eine minimale Bazel-BUILD-Datei dort drüben hinzuzufügen - ob ich diesen Baum "besitze" oder nicht. Es kann nicht von innerhalb des Quellbaums für mein Paket getan werden. –
Sortieren von, können Sie eine BUILD-Datei an '// dritte_party hinzufügen: BUILD' oder' //: BUILD', wenn Sie eine Quelle von Drittanbietern nicht "verschmutzen" möchten. – kristina