如何包含具有相互依赖关系的.proto文件

时间:2017-07-28 17:02:50

标签: protocol-buffers protoc proto

我有两个.proto文件,它们有两个相互依赖的包。

a.proto

syntax = "proto3";
import "b.proto";

package a;

message cert {
    string filename = 1;
    uint32 length = 2;
}

enum state {
    UP = 1;
    DOWN = 2;
}

message events {
    repeated b.event curevent = 1;
    uint32 val = 2;
}

b.proto

syntax = "proto3";
import "a.proto";

package b;

message event {
     a.cert certificate = 1;
     a.state curstate = 2;
}

当我尝试生成cpp文件时,会看到以下错误

# protoc -I. --cpp_out=. b.proto b.proto: File recursively imports itself: b.proto -> a.proto -> b.proto

如何实现这一目标?

注意:使用的protoc版本为libprotoc 3.3.0

1 个答案:

答案 0 :(得分:1)

proto编译器不会让你包含循环依赖。您必须组织代码,以便没有任何递归导入。您上面的示例代码的一个组织可能是:

a.proto

syntax = "proto3";

package a;

message cert {
    string filename = 1;
    uint32 length = 2;
}

enum state {
    UNDEFINED = 0;
    UP = 1;
    DOWN = 2;
}

b.proto

syntax = "proto3";
import "a.proto";

package b;

message event {
    a.cert certificate = 1;
    a.state curstate = 2;
}

message events {
    repeated event curevent = 1;
    uint32 val = 2;
}

您的events类型不使用a.proto中的任何内容,也使用event中的b.proto类型。将其移至b.proto

是有意义的