2017-07-28 428 views
0

我有兩個.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

+0

如果它是一個相互依賴,那麼將共享部分移動到c.proto將會起作用 - 但是,看看您的場景,我不認爲可以通過將所有內容移動到一個文件來解決這個問題。 –

回答

0

原編譯器不會讓你有循環依賴。你將不得不組織你的代碼,以便沒有任何遞歸導入。你的示例代碼的一個組織之上可能是:

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是很有意義的。