【问题标题】:How to get workspace directory in bazelrc如何在 bazelrc 中获取工作区目录
【发布时间】:2022-11-03 11:43:40
【问题描述】:

我想在 .bazelrc 中指定一个 ASAN 抑制文件。并且抑制文件位于工作区目录中。我尝试如下:

build:debug --action_env=LSAN_OPTIONS=suppressions=${workspace}/asan_leaks.supp

build:debug --action_env=LSAN_OPTIONS=suppressions=%workspace%/asan_leaks.supp

但我得到的是:

AddressSanitizer: failed to read suppressions file
'/projects/mytest/bazel-output/execroot/mytest/bazel-out/aarch64-dbg/bin/mytest/${workspace}/asan_leaks.supp'

AddressSanitizer: failed to read suppressions file 
'/projects/mytest/bazel-output/execroot/mytest/bazel-out/aarch64-dbg/bin/mytest/%workspace%/asan_leaks.supp'

如果我硬编码一个绝对路径,它就可以工作,所以我尝试获取工作区的绝对路径。欢迎任何建议,谢谢。

【问题讨论】:

  • 我看到一些讨论发生在同一个here
  • 感谢@SG_Bazel 提供您的信息。那是完全相同的问题。

标签: bazel address-sanitizer bazelrc


【解决方案1】:

只需更新我的解决方法,以防有人遇到类似问题:

  1. 使用绝对路径对抑制文件进行硬编码,如下所示:

    构建:调试 --action_env=suppressions=/tmp/asan_leaks.supp

  2. 指定相对于工作空间目录的 workspace_status_command

    构建 --workspace_status_command=./bazel/cmd.sh

  3. 对 cmd.sh 中的抑制文件进行软链接

    bazel_dir=$(目录名--"$(readlink -f $0;)") ln -sf ${bazel_dir}/asan_leaks.supp /tmp/asan_leaks.supp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2013-05-19
    • 2011-06-19
    • 2021-01-18
    • 2015-09-02
    相关资源
    最近更新 更多