当我使用protoc生成c输出文件时,只有一个“主”原型文件没有任何导入,类似于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 still compiles without errors but is generating faulty cc and h files . 例如 . 添加导入“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();

Edit: 似乎我必须编译每个.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的文件 . There have to be a better resolution.