针对工程相对简单,proto文件相互引用少的可使用PROTOBUF_IMPORT_DIRS宏
比如下列的例子
root@28ed72873b84:/home/codepath/test# tree
.
|-- CMakeLists.txt
|-- meta
| `-- proto
| |-- CMakeLists.txt
| `-- common
| |-- bar
| | |-- CMakeLists.txt
| | `-- bar.proto
| `-- foo
| |-- CMakeLists.txt
| `-- foo.proto
`-- src
|-- CMakeLists.txt
|-- c_proto.cc
`-- c_proto.h
其中foo.proto文件如下:
foo.proto
message foo_msg
{
optional string name = 1;
}
bar.proto文件如下:
bar.proto
import "common/foo/foo.proto";
message bar_msg
{
optional foo_msg foo = 1;
optional string name = 2;
}
上述bar.proto文件引用foo.proto文件就不可以使用相对路径,仅可以使用foo.proto文件名
在bar文件夹下的CMakeLists.txt文件中设置PROTOBUF_IMPORT_DIRS宏即可
set(PROTOBUF_IMPORT_DIRS "foo.proto文件的路径即可")
设置完成后,正常通过find_package以及PROTOBUF_GENERATE_CPP宏来生成pb.h、pb.cc文件即可
问题:
如果文件夹框架如下
└── common
├── bar
│ ├── bar.proto
│ └── foo.proto
└── foo
└── foo.proto
若按上述方法操作就会出现文件名冲突的问题,无法兼容此列问题
可参看:https://blog.csdn.net/gcs_20210916/article/details/123992953