Предположим, у меня есть файл example.cc
, который выглядит как -
#include "target_one/one.h"
#include "target_two/two.h"
// Some code.
И файл BUILD
выглядит так -
cc_binary(
name = "example",
srcs = "example.cc",
deps = "//targets:target_three",
)
cc_binary(
name = "target_three",
srcs = "target_three.cc",
deps = "//targets:target_one",
"//targets:target_two",
)
Как видите, example.cc
удовлетворяет свои фактические зависимости от target_one
и target_two
косвенно через объявленную зависимость от target_three
. Он строит просто отлично. Теперь, если кто-то рефакторирует target_three
, чтобы удалить его зависимости на target_one
или target_two
, цель example
сломается.
Есть ли в bazel опция, которая может помечать такие косвенные зависимости и заставлять пользователя всегда указывать ВСЕ их фактические / прямые зависимости?
Я прочитал документацию bazel по Фактическая и объявленная зависимость , но единственный совет, который я нашел должен был быть небрежным при добавлении зависимостей.
Осматривая net, я обнаружил, что у людей возникла противоположная проблема - ошибка bazel из-за того, что пользователи не указали зависимости для системных заголовков, и они не хотят, чтобы они выдавали ошибку .