c – 如何解决bazel“unclared inclusion(s)”错误?
我是bazel的新手,而且我没有用它来构建我的C包
…后面是不同目录中的头文件列表.这些文件不是正在构建的包的一部分,而是从其他地方引入的. 我的问题是如何正确地将声明添加到BUILD文件以解决错误? 根据在线Bazel docu here,我应该将每个标头添加到srcs列表中. (要清楚,这些是我正在构建的库内部使用的标头,而不是公共接口的一部分,所以它们不属于hdrs.)但是如果我尝试这样做, srcs = [ ...,"path/to/dependent/headers/header.h",] 我收到一条错误消息
因为带有标题的目录不是Bazel包. 如果我尝试将最终/更改为冒号,则会显示错误消息,"path/to/dependent/headers:header.h",] 然后
Bazel C教程here,在“Additonal Include Paths”部分中说,外部包含目录应该通过copts声明: cc_library( name = "some_lib",srcs = ["some_lib.cc"],hdrs = ["some_lib.h"],copts = ["-Ithird_party/some_lib"],) 但添加-I标志并没有消除“未声明的包含”错误! $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 解决方法
Bazel希望你依赖标题(即把它们放在deps中).基本上,您应该为这些标题创建cc_library.将标题放在hdrs中并不公开它们,它只是将它们暴露给依赖于该库的规则(这正是你想要的).所以你会有:
# third_party/some_lib/BUILD cc_library( name = "headers",hdrs = glob(["*.h"]),visibility = ["//path/to/package:__pkg__"],) 请注意,您应该将// path / to / package替换为您的实际目标的包,但上面的__pkg__是文字:这就是您指示“对该包可见”的方式.然后没有其他包可以访问这些标头. 然后在目标的deps中添加// third_party / some_lib:标头. 这些小报仅用于修改C的标题搜索路径,而不是Bazel的. Bazel总是假设你会做#include“path / relative / to / your / workspace / dir.h”,但如果你有一个像这样的来源: #include "foo.h" 其中foo.h位于third_party / some_lib / includes / foo.h,您可以说copts = [“ – Iird_party / some_lib / includes”]将其添加到C的标题搜索路径中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |