如何更改cmake protobuff工作目录/路径?

Pin*_* Li 6 c++ cmake protocol-buffers

我想使用 cmake 从 protobuf 编译并生成库。但我无法在 CMakeLists.txt 中分配原始文件路径。问题是使用从父文件夹的相对导入(导入“modules/common/proto/abc.pb.h”)的其他 .proto 文件无法正确识别导入的原型。

\n\n

直接 protoc 命令中的不同文件路径将生成不同的命名空间:

\n\n
protoc --cpp_out=proto proto/person.proto (namespace is protobuf_proto_2fperson_2eproto)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
protoc --cpp_out=./ person.proto (namespace is protobuf_person_2eproto)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何在 CMakeLists.txt 中制作它并使用像 protobuf_proto_2fperson_2eproto 这样的结构化命名空间生成 .cc 文件?谢谢。

\n\n

我的文件列表如下:

\n\n
../test/\n`-- proto\n    |-- CMakeLists.txt\n    |-- demo.proto\n    `-- person.proto\n
Run Code Online (Sandbox Code Playgroud)\n\n

在演示.proto中:

\n\n
syntax = "proto2";\n\npackage tutorial;\n\nimport "proto/person.proto";\n\nmessage AddressBook {\n  repeated Person people = 1;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

亲自.proto:

\n\n
syntax = "proto2";\n\npackage tutorial;\n\nmessage Person {\n  required string name = 1;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的CMakeLists.txt是\xef\xbc\x9a

\n\n
PROJECT(tutorial)\n\ncmake_minimum_required(VERSION 2.8)\n\nfind_package(Protobuf REQUIRED)\n\nset(PROTOBUF_IMPORT_DIRS "../")\n\ninclude_directories(\n${Protobuf_INCLUDE_DIRS}\n)\n\nfile(GLOB ProtoFiles "*.proto")\n\nprotobuf_generate_cpp(ProtoSources ProtoHeaders ${ProtoFiles})\n\nadd_library(proto SHARED ${ProtoSources} ${ProtoHeaders})\ntarget_link_libraries(proto ${Protobuf_LIBRARIES})\nset_target_properties(proto PROPERTIES LINKER_LANGUAGE CXX)\n
Run Code Online (Sandbox Code Playgroud)\n