Относительные зависимости заголовка в Bazel - PullRequest
0 голосов
/ 25 января 2020

У меня проблемы с доступом к заголовкам из разных каталогов 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 , и, похоже, я здесь ничего не делаю. Мне не хватает чего-то тонкого?

...