我在协议缓冲区文件位于子目录中的项目中使用 FindProtobuf 模块。我希望该子目录中的 CMakeLists.txt 文件调用 protoc 来生成 CPP 文件。我的项目文件夹结构是这样的:
cammy/CMakeLists.txt # Root CMakeLists.txt
cammy/protofiles/test.proto # protofile
cammy/protofiles/CMakeLists.txt
我在 protobuf 文件夹的 CMakeLists.txt 文件中有 include(FindProtobuf)、find_package 调用和对 PROTOBUF_GENERATE_CPP 的调用。
可执行构建步骤位于根 CMakeLists.txt 文件中,我将生成的文件添加到该文件中的目标可执行文件中,即。
add_executable( ${EXEC} ${SRCS} ${PROTO_SRC} ${PROTO_HEADER} )
target_link_libraries( ${EXEC} ${PROTOBUF_LIBRARIES} )
都在根 CMakeLists.txt 中定义
当我运行 cmake 时,它不会运行 protoc 来生成源文件,即使我明确地将生成的源代码绑定到可执行文件,从而创建了一个依赖项。
当我将 protofiles 文件夹中 CMakeLists.txt 的所有内容移动到根 CMakeLists.txt 中时,就会编译 proto 文件。
谁能帮我这个?我希望所有协议缓冲区构建内容都放在 protofiles 文件夹中创建的 CMakeLists.txt 文件中。
我还注意到内部 CMakeLists.txt 中生成的变量(如 PROTO_SRC )在打印时在内部文件中定义(即我得到正确生成的 CPP 文件名)但是当我在根文件中打印相同的变量时..它是空的. 就好像我需要将变量“导出”(如果 cmake 中有方法)到根文件夹。
任何帮助将非常感激。
谢谢卡提克