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