2017-04-17 31 views
1

我正在尝试使用Bazel为TensorFlow设置我的自定义编译系统。 我需要在配置步骤中创建一个临时文件,我将在构建步骤中将其用作缓存。 我能在我的.bzl文件来创建它:用Bazel创建和读取临时文件

repository_ctx.file(filename) 

而且一个配置后,我可以看到,它里面的文件夹:

$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name% 

其中repository_name实际上是repository_ctx.name

但是在构建时我无法从我的.tpl脚本访问此路径。我想通过替换repository_ctx.template从.bzl脚本发送它,但即使在这里我还没有找到如何找到这条路!

它看起来并不像我可以使用像bazel-out或bazel-genfiles这样的符号链接来访问这个文件夹(这听起来很有前途,但不是......)。我也无法在该文件夹之外创建文件。

这是一个非常简单的问题,我只是不能相信,还有比硬编码路径或find它没有其他办法...

回答

1

我猜问题是,你不揭请在回购的BUILD文件中为您的构建文件使用它。你需要做的是这样的:

repository_ctx.file('whatever') 
repository_ctx.file('BUILD', 'exports_files(["whatever"])') 

然后你就可以在任何其他构建文件使用@repository_name//:whatever

exports_files用于让包依赖于来自其他包的源文件。

然后,在你的.bzl文件你在构建时加载的文件添加为一个属性,例如,

​​

然后,在规则执行,您可以通过上下文访问:

def _impl(ctx): 
    print(ctx.file._my_external_src.path) 

.path获取文件的路径。

+0

哼,我明白了。所以我必须找到一种方法将这个'@repository_name //:whatever'从BUILD文件发送到tpl文件。我想我接受你的答案,谢谢! – Zakor

+1

没问题!添加了如何从.bzl文件访问它。 – kristina