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

如何指定Bazel测试二进制文件的运行目录?无需修改业务代码

如何指定Bazel测试二进制的运行目录(无需修改代码)

有两种可靠的方法可以在不改动测试代码的前提下,仅通过调整BUILD文件解决这个问题:

方法一:用run_under直接切换运行目录

在cc_test规则中添加run_under属性,通过shell命令先切换到测试二进制所在的目录,再执行测试:

cc_test(
    name = "your_test_target",
    srcs = ["your_test.cc"],
    data = ["test_data.txt"],  # 你的数据文件
    run_under = "cd $$(dirname $0) && ",
)
  • 原理:$$(dirname $0)会被shell解析为测试二进制文件的所在目录路径,cd命令切换到该目录后再执行测试,代码里的相对路径就能正确找到data中指定的文件。
  • 注意:这里用$$是为了转义Bazel的变量解析,确保shell能正确处理$0(代表当前执行的二进制文件路径)。

方法二:生成执行脚本处理目录切换

如果需要更复杂的运行逻辑,可以生成一个shell脚本,负责切换目录并启动测试:

# 生成切换目录的执行脚本
genrule(
    name = "run_test_script",
    outs = ["run_test.sh"],
    cmd = """
        echo '#!/bin/bash' > $@
        echo 'cd $(dirname $0)/$(RULEDIR) && ./your_test_target' >> $@
        chmod +x $@
    """,
    executable = True,
)

cc_test(
    name = "your_test_target",
    srcs = ["your_test.cc"],
    data = [
        "test_data.txt",
        ":run_test_script",
    ],
    run_under = "$(location :run_test_script)",
)
  • 原理:脚本会切换到测试二进制所在的输出目录($(RULEDIR)是Bazel内置变量,代表当前规则的输出目录),再启动测试二进制,确保相对路径解析正确。

内容的提问来源于stack exchange,提问作者Amir Hossein Sarebani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:22:37