0

我正在尝试在 bazel 方面实现clang 编译数据库的生成。看来这个clang文件的“目录”字段必须指定为绝对路径。现在,当我尝试使用 bazel 方面生成此文件时,所有相关的 bazel API 都会在工作区侧返回路径相对路径。

我的意思是“工作区根” ~/.cache/bazel/_bazel_<user>/<hash>/execroot/__main__

我想了两个技巧来完成这项工作:

  1. 使用ctx.actions.run_shell而不是ctx.actions.write生成文件,shell 可以在其中PWD使用$(realpath ../../../../../execroot/__main__).

我已经验证了它可以工作,但这肯定是不受欢迎的方法,因为 bazel 不能保证沙盒工作路径与工作区根目录的关系,因此很容易跨越 bazel 版本。

  1. 使用脚本生成文件。

这会将文件的生成分成两部分,因为所有编译命令信息仍然必须来自 bazel 方面,这使得维护起来很麻烦。

我想过但没有明显的方法使它起作用的另一种方法是以某种方式将__workspace_dir__变量从WORKSPACE.bazel文件传递到方面上下文,我无论如何都找不到这样做。

那么,有没有什么优雅的方法可以从方面实现上下文中获取这些信息呢?

4

0 回答 0