上下文:我正在尝试为https://github.com/tensorflow/tensorflow/issues/37861提供修复,其中手动列出了外部依赖项的头文件,但该列表是特定于版本的,因此无法跟上迄今为止。
怎么了:
tf_http_archive(name = "com_google_protobuf", system_build_file = clean_dep("//third_party/systemlibs:protobuf.BUILD") ...)
被调用tf_http_archive
是一个repository_rule
实际上只有ctx.template("BUILD.bazel", ctx.attr.system_build_file, {...}, False)
- 在
protobuf.BUILD
里面有一个列表HEADERS = ["google/protobuf/any.pb.h", ...]
,它被传递给调用的hdrs
参数cc_library
- 一个明显的
genrule
符号链接这些头文件(我$(INCLUDEDIR)
对$(@D)
Bazel 不是很熟悉,但 IIUC 是稍后使用的一些内部构建目录)
由于我一般不熟悉 Bazel,因此我假设标题列表是必需的,并且存在一个$(INCLUDEDIR)/google/protobuf
文件夹并且位于系统上的某个位置(其他),例如/usr/local/include
.
有什么方法可以通过 glob 或类似方式获取格式(即相对于 )的所有文件*.h
?Bazel函数不适用于绝对路径,因此无法使用。*.inc
$(INCLUDEDIR)
glob
我发现https://github.com/bazelbuild/bazel/issues/8846建议new_local_repository
与 abuild_file
和 a一起使用path
(在这种情况下)$(INCLUDEDIR)
,但我不知道如何将其应用于tf_http_archive
(有一些条件要么下载依赖项,要么只使用 system_build_file)。这似乎也可以避免符号链接(无论如何我都非常怀疑,因为该文件夹是通过-iquote
但包含样式添加的#include <...>
,请参阅我在https://github.com/tensorflow/tensorflow/issues/37861中的评论)
为问题做出贡献的人或为什么在调用中似乎忽略了 action_env 环境变量的想法的人的奖励积分native.cc_library
。