我正在尝试在 bazel 方面实现clang 编译数据库的生成。看来这个clang文件的“目录”字段必须指定为绝对路径。现在,当我尝试使用 bazel 方面生成此文件时,所有相关的 bazel API 都会在工作区侧返回路径相对路径。
我的意思是“工作区根” ~/.cache/bazel/_bazel_<user>/<hash>/execroot/__main__
。
我想了两个技巧来完成这项工作:
- 使用
ctx.actions.run_shell
而不是ctx.actions.write
生成文件,shell 可以在其中PWD
使用$(realpath ../../../../../execroot/__main__)
.
我已经验证了它可以工作,但这肯定是不受欢迎的方法,因为 bazel 不能保证沙盒工作路径与工作区根目录的关系,因此很容易跨越 bazel 版本。
- 使用脚本生成文件。
这会将文件的生成分成两部分,因为所有编译命令信息仍然必须来自 bazel 方面,这使得维护起来很麻烦。
我想过但没有明显的方法使它起作用的另一种方法是以某种方式将__workspace_dir__
变量从WORKSPACE.bazel
文件传递到方面上下文,我无论如何都找不到这样做。
那么,有没有什么优雅的方法可以从方面实现上下文中获取这些信息呢?