Bazel 编译protoc 可以成功编译

笔者在用bazel 编译 protobuf的项目的时候,参考一些csdn上的项目发现都无法正常使用,因此我整理了一个能正常使用的demo,供大家参考~

protoc --version             
libprotoc 21.12
bazel --version
bazel 6.0.0

 WORKSPACE文件:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "com_google_protobuf",
    sha256 = "7892a35d979304a404400a101c46ce90e85ec9e2a766a86041bb361f626247f5",
    strip_prefix = "protobuf-3.16.0",
    url = "https://github.com/protocolbuffers/protobuf/archive/v3.16.0.tar.gz",
)

load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")

protobuf_deps()

新建文件protoc,里面存放需要编译的proto和BUILD文件

BUILD文件为:

load("@rules_cc//cc:defs.bzl", "cc_proto_library")
load("@rules_proto//proto:defs.bzl", "proto_library")
package(default_visibility = ["//visibility:public"])


cc_proto_library(
    name = "msg_proto",
    deps = [
        ":msg_proto_lib",
    ],
)

proto_library(
    name = "msg_proto_lib",
    srcs = [
        "msg.proto",
    ],
)

proto文件随意:文件名为:msg.proto

syntax = "proto2";

package Im;
message Content
{
  required int32  id = 1;
  required string str = 2;
  optional int32  opt = 3;
}

在WORKSPACE同级新建文件夹src:

BUILD:

load("@rules_cc//cc:defs.bzl", "cc_proto_library")
load("@rules_proto//proto:defs.bzl", "proto_library")

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = ["//protoc:msg_proto"],
)

main.cc 

#include <iostream>
#include "protoc/msg.pb.h"

int main() {
  Im::Content msg ;
  msg.set_id(10);
  msg.set_str("sshuaige"),
  std::cout << msg.id() << '\n' << msg.str() << std::endl;
  return 0;
}

执行命令:

bazel run //src:main

INFO: Analyzed target //src:main (1 packages loaded, 2 targets configured).
INFO: Found 1 target...
Target //src:main up-to-date:
  bazel-bin/src/main
INFO: Elapsed time: 0.955s, Critical Path: 0.80s
INFO: 3 processes: 1 internal, 2 linux-sandbox.
INFO: Build completed successfully, 3 total actions
INFO: Running command line: bazel-bin/src/main
10
sshuaige
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值