Protobuf-import&import public

【轉載】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的路徑)下查找。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章