我想使用 cmake 从 protobuf 编译和生成库。但我无法在 CMakeLists.txt 中分配原始文件路径。问题是其他使用从父文件夹(import“modules/common/proto/abc.pb.h”)相对导入的 .proto 文件无法正确识别导入的 proto。
直接 protoc 命令中不同的文件路径会生成不同的命名空间:
protoc --cpp_out=proto proto/person.proto (namespace is protobuf_proto_2fperson_2eproto)
和
protoc --cpp_out=./ person.proto (namespace is protobuf_person_2eproto)
如何在 CMakeLists.txt 中创建并使用结构化命名空间(如 protobuf_proto_2fperson_2eproto)生成 .cc 文件?谢谢。
我的文件列表如下:
../test/
`-- proto
|-- CMakeLists.txt
|-- demo.proto
`-- person.proto
在 demo.proto 中:
syntax = "proto2";
package tutorial;
import "proto/person.proto";
message AddressBook {
repeated Person people = 1;
}
在 person.proto 中:
syntax = "proto2";
package tutorial;
message Person {
required string name = 1;
}
我的 CMakeLists.txt 是:</p>
PROJECT(tutorial)
cmake_minimum_required(VERSION 2.8)
find_package(Protobuf REQUIRED)
set(PROTOBUF_IMPORT_DIRS "../")
include_directories(
${Protobuf_INCLUDE_DIRS}
)
file(GLOB ProtoFiles "*.proto")
protobuf_generate_cpp(ProtoSources ProtoHeaders ${ProtoFiles})
add_library(proto SHARED ${ProtoSources} ${ProtoHeaders})
target_link_libraries(proto ${Protobuf_LIBRARIES})
set_target_properties(proto PROPERTIES LINKER_LANGUAGE CXX)