问题描述
上下文:我正在尝试为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
。
是否可以通过全局文件或类似方式获取格式为*.h
的所有*.inc
和$(INCLUDEDIR)
文件? Bazel glob
函数不适用于绝对路径,因此无法使用。
我发现https://github.com/bazelbuild/bazel/issues/8846建议将new_local_repository
和build_file
设置为path
的{{1}}使用$(INCLUDEDIR)
,但我看不到如何将其应用于tf_http_archive
(具有某些条件来下载依赖项或仅使用system_build_file)。这似乎也可以避免符号链接(无论如何我还是非常怀疑,因为该文件夹是通过-iquote
添加的,但是包含样式是#include <...>
,请参见https://github.com/tensorflow/tensorflow/issues/37861中的评论)
为问题或想法做出贡献的人的奖励积分,为什么在native.cc_library
调用中似乎忽略了action_env环境变量。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)