7

我需要将协议缓冲区 .proto 文件编译为 .pb.cc、.pb.h 文件。有一个用于这种转换的程序。

protoc test.proto --cpp_out .

如何在 cmake 中添加这样的通用规则?我可以用 add_custom_command 做到这一点。但是对于每个 .proto 文件,我都必须这样做。有一个更好的方法吗?

4

1 回答 1

6

看起来 CMake 的FindProtobuf模块通过 function 提供了这个功能PROTOBUF_GENERATE_CPP

您可以在一次调用中传递多个 .proto 文件,例如

file(GLOB ProtoFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")
PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles})

请注意,即使调用的 CMakeLists.txt 文件find_package(Protobuf)可能是顶级文件,调用该函数的 CMakeLists.txt 文件也需要与 .proto 文件位于同一目录中。

于 2013-02-04T20:49:41.210 回答