You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:06:08