c++ - 使用 CMake 为 C++ 构建协议(protocol)

标签 c++ cmake protocol-buffers grpc protoc

我目前正在开发一个将 gRPC 作为 git 子模块引用的 C++ 项目,并且我正在使用 CMake 来编译依赖项和我的源代码。为此,我基本上在我的 CMakeLists.txt 中有这个:

ADD_SUBDIRECTORY(lib/grpc)

然后我运行:
make grpc_cpp_plugin
make my_project

即使我在这里指定了 cpp_plugin,当需要编译 protoc 时,我实际上是在为所有支持的语言进行编译,例如(Java、Csharp、...):
/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc.o
/src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc.o
/src/google/protobuf/compiler/java/java_context.cc.o
/src/google/protobuf/compiler/java/java_doc_comment.cc.o

在四处寻找有关如何仅为 C++ 构建 protoc 的信息后,我发现有人在 github protobuf 目录 (link) 上打开了一个问题。但是,它似乎没有给出明确的答案。

有没有一种“干净”的方法来只在这里编译 c++ 依赖项?

最佳答案

在 gRPC 的 CMake 文件中进行了大量的 grep 操作后,我最终只编译了 c++ 版本的 protoc、protobuf 和 gRPC。我分三步完成:

  • 转到 grpc/third_party/protobuf/cmake/libprotoc.cmake 并删除包括 csharp、java、ruby 在内的行...( 注意保持 cpp 和与语言无关的 )
  • 去 grpc/CMakeLists.txt 你应该可以找到这个:
  • add_library(grpc_plugin_support
      src/compiler/cpp_generator.cc
      src/compiler/csharp_generator.cc
      src/compiler/node_generator.cc
      src/compiler/objective_c_generator.cc
      src/compiler/php_generator.cc
      src/compiler/python_generator.cc
      src/compiler/ruby_generator.cc
    )
    

    所以删除不需要的东西。
  • 最后, grpc/third_party/protobuf/src/google/protobuf/compiler/main.cc 并删除对其他语言的所有引用。
  • 关于c++ - 使用 CMake 为 C++ 构建协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60182810/

    相关文章:

    linux - Qt中的cmake找不到第三方库,而命令行中的cmake可以

    windows - 从命令行在 CMake 项目上设置 MSVC 运行时

    python - 获取protobuf当前时间戳

    c++ - 为什么将数组的地址分配给指针 "my_pointer = &my_array"是编译错误?

    c++ - A*寻路找到玩家需要走的路径,Qt中的c++

    c++ - C/C++ : Converting hexadecimal value in char to integer

    c++ - 在 Cmake 中链接 libavcodec,find_library 不适用于任何库

    python - 如何降级protobuf

    c++ - 使用 Google 的 protobuf 时出错

    c++ - 重载函数打印