protobuf之导入其他proto文件

原文链接:https://www.cnblogs.com/letsgollc/p/7423248.html

      场景:假如有文件hundredbulls.proto,需要导入另一个文件common.proto,两者在同一个目录中.

  • 导入方式

          在hundredbulls.proto文件的开头,使用关键字import导入另一个文件,如下↓↓↓↓↓↓↓

          

  • 使用方式

          假设在common.proto中定义了一个枚举类型GameStatus,如下↓↓↓↓↓↓

          

          在hundredbulls.proto文件中使用GameStatus,如下↓↓↓↓↓↓

          

            即:包名.消息或类型名称

 

  • 注意事项

         1、hundredbulls.proto中只能访问在common.proto中定义的消息或类型,无法访问在common.proto内import的其他proto文件里定义的消息或类型,即:只能访问直接import的proto文件里的类型或消息;

         2、使用import public关键字可以解决上述问题,即:如果在common.proto内使用import public关键字导入其他proto文件,那么在导入common.proto的proto文件中可以访问其他proto文件;

 

         具体说明如下↓↓↓↓↓↓

         

        1>、在hundredbulls.proto导入common.proto;

        2>、在common.proto中的导入另外两个协议文件:

         

        注意关键字的不同。

      3>、在maincity.proto中定义了一个消息类型

             

      4>、在hundredbulls.proto中使用map/maincity.proto中定义的消息:

             

      5>、编译

[apple@localhost ~]$ protoc --cpp_out=./IMPORT_DEMO/ -I./IMPORT_DEMO ./IMPORT_DEMO/*.proto

[libprotobuf WARNING google/protobuf/descriptor.cc:5411] Warning: Unused import: "common.proto" imports "map/maincity.proto" which is not used.
hundredbulls.proto:22:14: "game.maincity.MapPos" seems to be defined in "map/maincity.proto", which is not imported by "hundredbulls.proto".  To use it here, please add the necessary import.

          其中第二个错误提示:在hundredbulls.proto文件中未导入maincity.proto文件中定义的MapPos

     6>、解决: 使用import public导入第三文件!

  • import搜索路径

          在使用protoc编译时,需要使用选项-I或--proto_path通知protoc去什么地方查找import的文件,如果不指定,protoc将会在当前目录(即调用protoc的路径)下查找。

展开阅读全文

没有更多推荐了,返回首页