我是 bazel 新手,并且无法使用以下命令构建我的 C++ 包
错误:/path/to/package/BUILD:linenumber:1 规则“//path/to/package:name”中未声明包含内容:
此规则缺少“path/to/package/source_file.cpp”包含的以下文件的依赖关系声明
...后面是不同目录中的头文件列表。这些文件不是正在构建的包的一部分,而是从其他地方拉入的。
我的问题是如何正确地将声明添加到 BUILD 文件中以解决错误?
根据在线 Bazel 文档here https://bazel.build/versions/master/docs/be/c-cpp.html#cc_library我应该将每个标题添加到srcs列表。 (需要明确的是,这些是我正在构建的库内部使用的标头,not公共接口的一部分,因此它们不属于hdrs.) 但如果我尝试这样做,
srcs = [ ..., "path/to/dependent/headers/header.h",]
我收到一条错误消息
错误:...跨越子包的边界...(也许您的意思是
将冒号放在这里:...?)
因为带有标头的目录不是 Bazel 包。
如果我尝试将最后的 / 更改为冒号,如该错误消息所示,
srcs = [ ..., "path/to/dependent/headers:header.h",]
then
错误:...目标名称不能包含“:”。
Bazel C++ 教程here https://bazel.build/versions/master/docs/tutorial/cpp.html,在“附加包含路径”部分中表示外部包含目录应通过声明copts:
cc_library(
name = "some_lib",
srcs = ["some_lib.cc"],
hdrs = ["some_lib.h"],
copts = ["-Ithird_party/some_lib"],
)
但添加 -I 标志确实如此notgit 摆脱“未声明的包含”错误!
$ 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