我需要将协议缓冲区 .proto 文件编译为 .pb.cc、.pb.h 文件。有一个用于这种转换的程序。
protoc test.proto --cpp_out .
如何在 cmake 中添加这样的通用规则?我可以用 add_custom_command 做到这一点。但是对于每个 .proto 文件,我都必须这样做。有一个更好的方法吗?
我需要将协议缓冲区 .proto 文件编译为 .pb.cc、.pb.h 文件。有一个用于这种转换的程序。
protoc test.proto --cpp_out .
如何在 cmake 中添加这样的通用规则?我可以用 add_custom_command 做到这一点。但是对于每个 .proto 文件,我都必须这样做。有一个更好的方法吗?
看起来 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 文件位于同一目录中。