首先编译生成protoc主程序
- git clone --recursive git@github.com:grpc/grpc
-
- cd grpc
-
- mkdir build_ninja & cd build_ninja
-
- cmake -GNinja ..
-
- cp third_party/protobuf/protoc .
1. 生成C++版本的pb文件
protoc --grpc_out cpp --cpp_out cpp -I ./ --plugin=protoc-gen-grpc=grpc_cpp_plugin.exe helloworld.proto
2. 生成python版本pb文件
protoc --grpc_out python --python_out python -I ./ --plugin=protoc-gen-grpc=grpc_python_plugin.exe helloworld.proto
3. 生成csharp版本
protoc --grpc_out csharp --csharp_out csharp -I ./ --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe helloworld.proto
4. 生成java版本
首先生成java版本plugin
git clone --recursive git@github.com:grpc/grpc-java
创建grpc-java-plugin文件夹
拷贝grpc-java/compiler/src/java_plugin/cpp/内的文件到grpc-java-plugin中
创建一个CMakeLists.txt文件将一下内容拷贝其中
- cmake_minimum_required(VERSION 3.11)
-
- project(grpc-java-plugin)
-
- file(GLOB JAVA_PLUGIN_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/java_plugin.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/java_generator.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/java_generator.h)
-
- add_executable(${PROJECT_NAME} ${JAVA_PLUGIN_SRCS})
-
- target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/grpc/include)
- target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/grpc/third_party/protobuf/src/)
- add_subdirectory(grpc)
-
- target_link_libraries(${PROJECT_NAME} PRIVATE libprotobuf-lite grpc libprotoc)
将第一步的grpc源码整个拷贝到grpc-java-plugin中
编译生成grpc-java-plugin
mkdir build_ninja & cd build_ninja
cmake -GNinja ..
cmake --build . -j 10
拷贝插件到protoc程序目录下
生成命令
protoc --grpc_out java --java_out java -I ./ --plugin=protoc-gen-grpc=grpc_java_plugin.exe helloworld.proto
5.生成golang版本
git clone --recursive git@github.com:golang/protobuf
用于编译protoc-gen-go插件进而升成 helloworld.pb.go
编译插件cd protobuf/protoc-gen-go/
go build
gitt clone --recursive git@github.com:grpc/grpc-go
用于编译protoc-gen-go-grpc插件进而生成helloworld_grpc.pb.go
编译插件cd grpc-go/cmd/protoc-gen-go-grpc/
go build
插件拷贝到protoc目录下,执行生成命令
protoc --go-grpc_out=golang --go_out=golang helloworld.proto