是否可以从Bazel.bzl规则中获取$pwd值?
我试图从.bzl规则中获取完整当前目录路径的值。我尝试过以下方法:是否可以从Bazel.bzl规则中获取$pwd值?,bazel,Bazel,我试图从.bzl规则中获取完整当前目录路径的值。我尝试过以下方法: ctx.host\u配置。默认shell\u环境路径返回“/Users/[user\u name]/.rbenv/shimmers:/usr/local/bin:/usr/bin:/bin:… ctx.bin_dir.path返回bazel out/local fastbuild/bin pwd=ctx.expand\u make\u variables(“cmd”、“$$pwd”、{})返回字符串$pwd-我认为这条规则对我没
ctx.host\u配置。默认shell\u环境路径
返回“/Users/[user\u name]/.rbenv/shimmers:/usr/local/bin:/usr/bin:/bin:…
ctx.bin_dir.path
返回bazel out/local fastbuild/bin
pwd=ctx.expand\u make\u variables(“cmd”、“$$pwd”、{})
返回字符串$pwd
-我认为这条规则对我没有帮助,但可能只是用错了/Users/[user\u name]/git/workspace/path/to/Bazel/rule.bzl
,或者至少是工作区目录之前路径的第一部分
我不能使用pwd
,因为在调用ctx.actions.run\u shell()之前需要这个值
Bazel配置中是否没有保存此值的属性?目标是实现气密构建,因此不应依赖于绝对路径
可以在ctx.actions.run_shell()
的命令中随意使用pwd
(对于可复制的构建,请小心,避免将绝对路径放入生成的文件中)
编辑。
从技术上讲,有一些解决方法。例如,您可以通过--define
标志传递路径:
bazel build :all --define=path=$(pwd)
然后使用ctx.var[“path”]
可以获得该值
根据下面的评论,您希望路径声明输出。让我重复一下:您不应该使用绝对路径来声明输出文件。请在包中声明输出。然后让您调用的工具使用该输出
例如,当您调用gcc时,您可以使用-o
来指定输出。当工具写入stdout时,使用shell重定向它。如果该工具确实不灵活,您可能希望使用自己的脚本将其包装(例如,调用该工具并复制输出文件)
在这里使用绝对路径不是正确的解决方案。例如,应该可以在远程计算机上执行操作(绝对路径没有意义)
Zip可能是一个合理的解决方案。当您无法预先知道输出文件的数量或名称时,它非常有用。在调用run\u shell()
之前,我需要pwd
,以便声明输出文件来自python的coverage
命令(Coverage.py实用程序使用绝对路径为html报告命名源文件)。我没有明确声明输出文件,而是决定将它们压缩(通常更好地解决我的问题)。如果您确认没有办法将绝对路径放入run_shell()之外的bazel变量,我可以接受您的答案
。再次感谢您,尽管我的意图不是在绝对路径位置声明输出。我要说的是Coverage.py工具采用绝对路径,将/
切换为\u
,并将其用作它生成的html文件的名称。因此,所有内容仍然是保密的,我只想知道输出文件的名称乐。