У меня проблемы с доступом к заголовкам из разных каталогов Bazel относительно рабочего пространства root.
Вот упрощенное представление структуры файлов моих проектов:
.
├── util
│ └── BUILD
│ util.h
├── test
│ └── BUILD
│ common.h
│ test.h
│ test.cpp
├── BUILD
├── other_files.{h, cpp}
└── WORKSPACE
test.cpp
включает common.h
, а common.h
содержит следующее:
#include "util/util.h"
util/BUILD
определяет библиотеку util
как:
cc_library(
name = "util",
hdrs = ["util.h"],
visibility = ["//visibility:public"],
)
и test/BUILD
объявляет //test/test
зависеть от этого следующим образом:
cc_library(
name = "common",
hdrs = ["common.h"],
deps = [
"//util:util",
],
)
cc_library(
name = "test",
hdrs = ["test.h"],
srcs = ["test.cpp"],
deps = [
"//util:util",
":common"
],
)
Однако, когда я пытаюсь скомпилировать //test:test
(версия 1.2.1 bazel), происходит сбой с:
In file included from test/test.cpp:3:
test/common.h:3:10: fatal error: util/util.h: No such file or directory
3 | #include "util/util.h"
| ^~~~~~~~~~~~~
Все необходимые заголовочные файлы включены в песочницу , поэтому я могу компилировать их, изменив include в common.h
на:
#include "../util/util.h"
Но я, очевидно, не хочу сделайте это.
Я прочитал примеры Bazel , и, похоже, я здесь ничего не делаю. Мне не хватает чего-то тонкого?