【转载】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的路径)下查找。