我希望使用原型并由cmake管理。使用cmake构建原型时找不到成员
的样例项目可显示here
的文件如下
.
├── app1
│ ├── app1.cpp
│ └── app1.proto
├── CMakeLists.txt
├── common
│ ├── bar
│ │ ├── bar.proto
│ │ └── CMakeLists.txt
│ └── foo
│ ├── CMakeLists.txt
│ └── foo.proto
└── README.md
如果我想只是产生一些cpp文件,我可以只使用命令
$ protoc --cpp_out=build common/bar/bar.proto
$ protoc --cpp_out=build common/foo/foo.proto
和可以生成所需的文件。
虽然,如果我使用cmake的,它总是报告错误如下:
[ 14%] Running C++ protocol buffer compiler on foo.proto
Scanning dependencies of target FooLib
[ 28%] Building CXX object common/foo/CMakeFiles/FooLib.dir/foo.pb.cc.o
Linking CXX static library libFooLib.a
[ 28%] Built target FooLib
[ 42%] Running C++ protocol buffer compiler on bar.proto
Scanning dependencies of target BarLib
[ 57%] Building CXX object common/bar/CMakeFiles/BarLib.dir/bar.pb.cc.o
/Users/yu/Workspace/res/proto/project/build/common/bar/bar.pb.cc:79:5: error: no member named 'protobuf_AddDesc_common_2ffoo_2ffoo_2eproto' in the global namespace
::protobuf_AddDesc_common_2ffoo_2ffoo_2eproto();
~~^
1 error generated.
make[2]: *** [common/bar/CMakeFiles/BarLib.dir/bar.pb.cc.o] Error 1
make[1]: *** [common/bar/CMakeFiles/BarLib.dir/all] Error 2
make: *** [all] Error 2
任何帮助表示赞赏。
非常感谢您的解释,我也混淆了路径。我可以知道你是如何处理案件的.proto需要导入另一个?我认为这对我的工作非常必要。 –
@YuJing我个人?那么,我不使用cmake。大多数情况下,我使用了已经写好的Makefile规则(您可以检查protobuf自己的Makefiles)或[我自己的自定义构建系统](https://github.com/sandstorm-io/ekam)(可能不是您想要的) 。一旦[Bazel](http://bazel.io)(Google的开源内部构建系统)添加了对proto_library的支持([见本期内容](https://github.com/google/bazel/issues/52 )),这可能是一个不错的选择。 –