在.proto

时间:2017-04-06 08:55:26

标签: protocol-buffers

当我使用protoc生成c ++输出文件时只有一个" main" proto文件没有任何导入,类似于protobuf示例,一切都生成正常,并在我的项目中使用它时工作。

但是当我使用任何形式的导入时,c ++输出代码都有问题。我用以下代码编译我的.proto:

protoc --cpp_out=../grpc --grpc_out=../grpc --plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin sample.proto

这是我的示例代码:

syntax = "proto3";

service SampleService
{
  rpc Login(LoginRequest) returns (LoginResponse) {};
}

message LoginRequest {}

message LoginResponse {}

当我尝试外包单个邮件时, protoc仍然编译没有错误但是生成了错误的cc和h文件。 例如。加入 import" messages.proto 内容

syntax = "proto3";

message LoginRequest
{
}

我的c ++代码不再编译并包含错误的东西。 我的sample.pb.h包含和未解析的包含

#include "messages.pb.h

我的sample.pb.cc包含两个未解析的函数

::protobuf_messages_2eproto::InitDefaults();
::protobuf_messages_2eproto::AddDescripttors();

修改 看来我必须编译每个.proto我也已经导入了。但后来我很困惑。

我想要一个" main" .proto,其中包含service.proto和messages.proto,其中包含对我所有消息的导入,这些消息也是.proto-files。我不时会想要创建新消息,因此我可以轻松地将它们包含在内,而不是一个难以理解的大文件。

我该怎么做?我不希望为我的小项目提供200个输出cc / h文件。这是怎么想的?

我的文件夹结构:

*src-Folder*
--main.proto (imports service.proto and messages.proto)
--service.proto (imports messages.proto)
--messages.proto (imports /messages/*
--*messages-Folder*
-----messagepair1
-----messagepair2
...

EDIT2: 我自己写了一个workarround,直到有一个更好的解决方案来克服该文件的混乱。我编辑了我的.proto文件并删除了所有描述,然后消息本身(导入,语法,包...)使用" cat"将每个.proto文件连接成一个文件,并使用上面发布的protoc编译它。 不太好但我以后在我的项目中不想要50-100 cc / h的文件。 必须有更好的解决方案。

0 个答案:

没有答案