bazel: не удается найти зависимый заголовочный файл для очень простого случая - PullRequest
0 голосов
/ 27 января 2020

Во-первых, мое окружение:

  • Windows 10
  • Базель 2.0.0
  • VS2017

Я сделал очень простой C ++ проект с использованием Bazel. Он имеет два BUILD s для проверки целевых ссылок. Макет:

- WORKSPACE
- libfoo
  |- BUILD
  |- foo.h
  |- foo.cpp
- bar
  |- BUILD
  |- bar.cpp

В BUILD файле libfoo определена очень простая библиотека:

cc_library(
    name = "foo",
    srcs = ["foo.cpp"],
    hdrs = ["foo.h"],
    visibility = ["//visibility:public"]
)

А в баре BUILD объявлен исполняемый файл, который deps libfoo:

cc_binary(
    name = "bar",
    srcs = ["bar.cpp"],
    deps = ["//libfoo:foo"],
)

, где bar.cpp вызвал функцию, определенную в libfoo:

#include "foo.h"

#include <iostream>

int main()
{
    std::clog << "bar main" << std::endl;
    say_foo(); // a function defined in libfoo
}

Однако когда я компилирую bar, используя bazel build "//bar:bar", компилятор утверждает, что foo.h не может быть открытым (код ошибки C1083 ).

Ответы [ 2 ]

1 голос
/ 28 января 2020

После более детального просмотра официального урока я обнаружил, что неправильно понял функцию deps, она не добавляет каталог библиотеки в в c dir .

На самом деле, #include "libfoo/foo.h" должно быть записано в bar.cpp вместо #include "foo.h", где должен использоваться полный относительный путь целевого foo.

1 голос
/ 27 января 2020

У вас есть два способа ее решения:

Либо вы указываете свойство includes в cc_library

cc_library(
    name = "foo",
    srcs = ["foo.cpp"],
    hdrs = ["foo.h"],
    includes = ["./"],
    visibility = ["//visibility:public"]
)

Или вы в bar.cpp включаете foo.h как #include "libfoo/foo.h".

...