我刚刚开始与 Bazel 合作。所以,我提前道歉,我无法弄清楚这一点。
我正在尝试运行一个命令,该命令将一堆文件输出到一个目录,并使该目录可用于后续目标。我有两种不同的尝试:
我天真地希望只用genrule
. 但是,您似乎无法说“我不确切知道此命令将输出什么”并将目录放入outs
. 现在我正在尝试编写一个可以使用的规则,ctx.actions.declare_directory
但我还没有完全正确。我似乎无法摆脱tools
我的工作区并进入我的规则。
我的 genrule 尝试看起来像这样:
genrule(
name = "doit",
srcs = [
"doitConfigA",
"doitConfigB",
],
cmd = 'HOME=. ./$(location path/to/doit) install',
# Neither of the below outs work - seems like bazel wants to know
# exactly this list of files. I don't know the files that
# will be output ahead of time.
# This one looks at the `out_dir` that I already have …
Run Code Online (Sandbox Code Playgroud) 我正在为 bazel 构建规则编写一些验证代码,并且需要进行一些路径验证。我需要检查某个文件是否存在于与 BUILD 文件相同的目录中。我注意到有一个上下文属性build_file_path
指向 BUILD 文件。我想从中提取父目录。
看起来我无法创建新path
对象 - 我没有看到构造函数/初始化程序。Starlark 似乎不像os.path
python 那样支持,因为不支持导入。
获取代表 Starlark 路径的字符串对象的父目录的规范方法是什么?
通过 http_archive 下载存档后,我想运行一个脚本来从文件夹结构和其中的 Cmake 文件生成 BUILD 文件(我目前手动执行此操作,并且很容易编写脚本)。我在 starlark 文档中没有找到有关如何打开、读取和写入文件的任何内容,但由于 http_archive 本身是从 bzl 文件加载的(尽管尚未找到该文件的源...)并生成 BUILD 文件(通过从档案中解压它们)我想一定可以为 http_archive 编写一个包装器来生成 BUILD 文件?