You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何引用bazel BUILD文件相对于工作区根目录的所在源目录路径?

解决方案

Bazel 提供了内置的预定义变量可以直接满足需求,无需依赖$(location)语法,不会引入循环依赖。

核心原理

Bazel 解析 BUILD 文件时,会内置两个可直接调用的全局值:

  • Starlark 全局变量PACKAGE_NAME:值为当前 BUILD 文件所在目录相对于工作区根的相对路径,末尾不带斜杠,工作区根目录的PACKAGE_NAME为空字符串
  • Make 变量$(PACKAGE_NAME):作用和上述变量一致,可直接在属性的字符串值中展开使用

使用示例

如果你需要传入的是当前BUILD文件所在目录的相对路径,直接修改配置如下:

sh_binary(
    …
    args = [
        "$(PACKAGE_NAME)",
    ],
    …
)

如果你需要传入的是当前BUILD文件本身的完整相对路径,可以用Starlark语法拼接避免根目录路径出现前导斜杠问题:

# BUILD文件内容
sh_binary(
    …
    args = [
        "BUILD" if PACKAGE_NAME == "" else "{}/BUILD".format(PACKAGE_NAME),
    ],
    …
)

说明

该值是Bazel解析BUILD文件阶段就确定的静态值,不会引入任何额外依赖,BUILD文件移动后会自动更新为对应路径,无需手动修改配置。

内容的提问来源于stack exchange,提问作者Noel Yap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:06:03