在 Bazel 中包含 Protobufs

Including Protobufs with Bazel

我有以下 BUILD 文件:

load("@com_google_protobuf//:protobuf.bzl", "cc_proto_library")

### Protos ###

cc_proto_library(
    name = "homework_cc_proto",
    protoc = "@com_google_protobuf//:protoc",
    default_runtime = "@com_google_protobuf//:protobuf",
)

proto_library(
    name = "homework_proto",
    srcs = [
        "protos/complexity.proto",
        "protos/example.proto",
        "protos/problem.proto",
        "protos/solution.proto",
    ],
)

### End Protos ###

### Binaries ###

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [":homework_cc_proto"],
)

main.cc

#include <iostream>
#include "example.pb.h"

int main() {
  std::cout << "Hello!" << std::endl;
}

如果我调用 bazel build :homework_cc_proto,构建成功。但是,当我 运行 bazel build :main 时,我收到一条错误消息,提示无法找到 example.pb.h。如何导入我构建的 protobufs?

您的 cc_proto_library 需要依赖于 homework_proto

cc_proto_library(
    name = "homework_cc_proto",
    protoc = "@com_google_protobuf//:protoc",
    default_runtime = "@com_google_protobuf//:protobuf",
    deps = [ ":homework_proto" ],
)