我试图将ASAN清理添加到使用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文件中的构建规则中,但是对于我们已经拥有的所有gazillion规则,我们无法真正做到这一点。有没有办法为所有规则或类似的东西添加全局依赖?
答案 0 :(得分: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
文件所需的包。