Этот особый аспект строительства чего-то, что Базель должен сделать намного проще, чем есть на самом деле. Google пытается прояснить это, но, похоже, это не работает. Примерно на 1/3 пути вниз по do c написано:
foo.cc can include both foo.h bar.h
, потому что cc_binary для «foo. cc» зависит от библиотеки «bar», а в библиотеке «bar» конкретно перечислены bar.h в разделе hdrs. См. https://docs.bazel.build/versions/master/be/c-cpp.html.
Значение, которое я рисую, следующее:
- , если библиотека здесь, bar строится
- , если двоичный файл правильно вызывает здесь библиотечную зависимость bar
- если заголовки, необходимые для двоичного файла, появляются в разделе hdrs библиотеки
- если библиотека видна для двоичного файла
, тогда код в двоичном файле (при условии отсутствия других несвязанных проблем) может включить заголовки библиотеки.
Мой случай удовлетворяет всем четырем предварительным условиям. Но когда я собираю двоичный файл, Bazel даже не удосуживается поставить -I в командной строке , а затем жалуется, что заголовок не найден! Что дает?
-----------------
load("@rules_cc//cc:defs.bzl", "cc_library")
cc_library(
name = "hello-time",
srcs = ["mylib/src/hello-time.cc"],
hdrs = glob(
["mylib/include/**/*.h"],
),
copts = ["-Ilib/mylib/include"],
visibility = ["//visibility:public"],
)
-----------------
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
cc_binary(
name = "hello-world",
srcs = ["test/src/hello-world.cc"],
deps = [
"//lib:hello-time",
],
stamp = 1,
)
Что нужно для того, чтобы Bazel действительно использовал зависимость для поиска правильных путей включения?
tasks/test/src/hello-world.cc:1:10: fatal error: hello-time/hello-time.h: No such file or directory
#include <hello-time/hello-time.h>
^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.