4

我想使用 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)
4

0 回答 0