使用 CMake 为 C++ 构建协议

Build protoc for C++ with CMake

我目前正在开发一个将 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) 上提出了一个问题。不过,似乎并没有给出明确的答案。

是否有 'clean' 只编译 c++ 依赖项的方法?

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

  1. 转到 grpc/third_party/protobuf/cmake/libprotoc.cmake 并删除包括 csharp、java、ruby、...(注意保留 cpp 和语言的行不可知论者)
  2. 转到 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
)

所以删除不需要的内容。

  1. 最后,grpc/third_party/protobuf/src/google/protobuf/compiler/main.cc 并删除所有对其他语言的引用。