2017-10-20 148 views
0

我想添加ASAN衛生對我們的項目,它使用巴澤爾和堅持以下問題。我已經添加了sanitize方法黑名單中我們bazel.rcBazel規則缺失叮噹的衛生黑名單依賴

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

'// main:memory_leak'規則的定義是怎樣的?爲什麼你認爲你必須添加blacklist.txt到gazillion規則? –

+0

'// main:memory_leak'就是一個例子。我們的項目中有數百個或規則。 – user1767432

回答

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」所有其他規則。最後一個空文件只是定義一個加載cc.bzl文件所需的Bazel包。