CMake:如何添加自定义通用编译规则?

Moh*_*imi 7 cmake protocol-buffers

我需要将协议缓冲区.proto文件编译为.pb.cc,.pb.h文件.这个转换有一个程序.

protoc test.proto --cpp_out .
Run Code Online (Sandbox Code Playgroud)

如何在cmake中添加这样的通用规则?我可以使用add_custom_command执行此操作.但我必须为每个.proto文件.有一个更好的方法吗?

Fra*_*ser 6

看起来CMake的FindProtobuf模块通过该功能提供此功能PROTOBUF_GENERATE_CPP.

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

file(GLOB ProtoFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")
PROTOBUF_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles})
Run Code Online (Sandbox Code Playgroud)

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

  • 只是为了扩展,$ {ProtoSources}和$ {ProtoHeaders}是变量,分别包含<filename> .pb.cc和<filename> .pb.h文件.它们可以直接在add_library()和add_executable()函数中使用. (6认同)