使用Bazel创建和读取临时文件

使用Bazel创建和读取临时文件,bazel,custom-build,Bazel,Custom Build,我正在尝试使用Bazel为TensorFlow设置自定义构建系统。 我需要在配置步骤中创建一个临时文件,在构建步骤中将其用作缓存。 我可以在.bzl文件中创建它,方法是: repository_ctx.file(filename) 配置之后,我可以看到它在文件夹中: $HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name% 其中repository\u name实际上是repository\u ctx.name

我正在尝试使用Bazel为TensorFlow设置自定义构建系统。 我需要在配置步骤中创建一个临时文件,在构建步骤中将其用作缓存。 我可以在.bzl文件中创建它,方法是:

repository_ctx.file(filename)
配置之后,我可以看到它在文件夹中:

$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name%
其中repository\u name实际上是
repository\u ctx.name

但在构建期间,我无法从.tpl脚本访问此路径。我想通过替换
repository\u ctx.template
从.bzl脚本发送它,但即使在这里,我也没有找到如何找到这个路径

看起来我无法使用bazel out或bazel genfiles等符号链接访问此文件夹(这听起来很有希望,但不是…)。我也无法在此文件夹外创建文件


这是一个非常简单的问题,我无法相信除了硬编码路径或查找路径之外,没有其他方法。

我想问题在于,您没有在repo的构建文件中公开文件,以便构建使用它。您需要执行以下操作:

repository_ctx.file('whatever')
repository_ctx.file('BUILD', 'exports_files(["whatever"])')
然后,您可以在任何其他构建文件中使用
@repository\u name/:which

用于使包依赖于其他包的源文件

然后,在生成期间加载的.bzl文件中,将该文件添加为属性,例如

attrs = {
    '_my_external_src' : attr.label(
        default = Label('@my_repository//:whatever'),
        allow_single_file = True,
    ),
},
然后,在规则实现中,您可以通过上下文访问它:

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

.path
获取文件的路径。

嗯,我明白了。因此,我必须找到一种方法,将这个
@repository\u name//:which
从构建文件发送到tpl文件。我想我会接受你的回答,谢谢!没问题!添加了如何从.bzl文件访问它。