在跨越3个存储库的C++项目中使用protobuf

nwsw7zdq  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(92)

我有三个仓库,(重新)使用一组protobuf文件:

repo1
 + hello.proto
 + goodbye.proto

repo2
 + hello.proto
 + goodbye.proto

repo3
 + hello.proto
 + goodbye.proto

字符串
.proto的定义只在repo 1中得到了发展。我应该如何重用这些定义?我在正确(或建议)的方式上找不到资源,似乎我的选择是:
1.将生成的(protoc编译的)C++代码作为包分发(比如vcpkg包)
1.将proto文件本身作为一个包分发,或者将它们作为一个repo并将其作为子repo添加到我的项目中
我倾向于选择1,但不知道protoc是否保证在Linux和Windows上生成相同的代码-是否会有任何不必要的副作用。重用proto文件似乎更安全,但将它们合并到其他仓库的构建系统中需要更多的工作和维护。

ca1c2owp

ca1c2owp1#

protoc实用程序保证只生成适合工具链和libprotobuf版本的代码。如果语言和库的版本兼容,则通常可以使用相同的位顺序从Windows移植到Linux。生成的代码与运行时的版本相关联。如果使用v.3.12库运行protoc,则无法使用v.3.13。如果使用以前的版本编译protoc,它不能使用后者的共享库。它是可移植的有线格式,使用的编译单元有限。
通常的做法是使用包含“public”.proto文件的文件夹作为子存储库(子模块)。
另一种选择是创建一个静态链接libprotobuf. a(或非linux系统上的类似物)的库,这使得整个程序可移植,而不需要依赖libprotobuf。
一些真实的用例,例如某些航空遥测协议,通过二进制或结构化格式的消息反向工程描述来支持这一点。只有在需要支持protoc不支持的语言或非常小规模的控制器时才会出现这种情况。
PS. protoc支持多种语言,你也打算这么做吗?

相关问题