1

我正在尝试将 ASAN sanitize 添加到我们使用 Bazel 并遇到以下问题的项目中。我在我们的 bazel.rc 中添加了清理黑名单

build:asan --copt -fsanitize=address
build:asan --linkopt -fsanitize=address
build:asan --copt -fsanitize-blacklist=blacklist.txt

但是当我建立一个目标时,我得到了缺少依赖错误

ERROR: memory/main/BUILD:1:1: undeclared inclusion(s) in rule '//main:memory_leak':
this rule is missing dependency declarations for the following files included by 'main/memory_leak.cpp':
  'memory/blacklist.txt'
Target //main:memory_leak failed to build

似乎应该将 blacklist.txt 添加到 BUILD 文件中的构建规则中,但是对于我们已经拥有的所有海量规则,我们不能真正做到这一点。有没有办法为所有规则或类似的东西添加全局依赖项?

4

1 回答 1

1

通常 C++ 工具链应该具有依赖关系,但它是自动生成的。

您始终可以创建一个宏来覆盖默认的 cc_library:

tools/build_rules/prelude_bazel

load('@//tools/build_rules:cc.bzl', 'cc_library')

tools/build_rules/cc.bzl

def cc_library(data=[], **kwargs): native.cc_library(data = data + ['//memory:blacklist.txt'], **kwargs)

memory/BUILD

exports_files(['blacklist.txt'])

还要添加一个空文件tools/build_rules/BUILD

第一个文件cc_library在所有文件的开头导入,第二个文件定义一个新文件cc_library,添加缺少的依赖项,第三个文件只是将“blacklist.txt”暴露给所有其他规则。最后一个空文件只是为 Bazel 定义一个加载cc.bzl文件所需的包。

于 2017-11-21T10:09:20.377 回答