CMake为库目标生成gRPC文件时protoc路径报错如何解决?
问题根因
调用protobuf_generate生成gRPC代码时缺少GENERATE_EXTENSIONS参数,导致CMake将gRPC插件路径识别为待编译的proto文件传递给protoc,触发路径不匹配错误。同时你还缺少gRPC运行时依赖的链接配置,生成代码后编译也会报错。
修复方案
直接修改protocol目录下的CMakeLists.txt即可,完整修改后内容如下:
add_library(protocol) target_include_directories(protocol PUBLIC . ${CMAKE_CURRENT_BINARY_DIR} ${Protobuf_INCLUDE_DIRS} ) find_package(Protobuf REQUIRED) find_package(gRPC CONFIG REQUIRED) # 补充链接gRPC运行时依赖 target_link_libraries(protocol ${Protobuf_LIBRARIES} gRPC::grpc++) get_target_property(grpc_cpp_plugin_location gRPC::grpc_cpp_plugin LOCATION) protobuf_generate( TARGET protocol LANGUAGE CPP PROTOS msg.proto ) protobuf_generate( TARGET protocol LANGUAGE grpc # 新增:指定gRPC生成文件的后缀,让CMake正确识别参数边界 GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc PROTOS myrpc.proto PLUGIN "protoc-gen-grpc=${grpc_cpp_plugin_location}" # 可选新增:明确指定proto文件搜索根目录,避免跨proto引用报错 IMPORT_DIRS ${CMAKE_CURRENT_SOURCE_DIR} )
修改完成后清空原有构建目录重新生成编译即可正常生成gRPC代码。
内容的提问来源于stack exchange,提问作者Dávid Tóth
相关产品推荐
相关产品推荐

