工具準備
- Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used)
- (Optional) Install Git。如果不借助梯子,git clone獲取grpc項目超高概率失敗
- Install CMake。
- Install NASM and add it to PATH (choco install nasm) - required by boringssl。安裝好後,主要將其安裝目錄添加到PATH中
- Install Go - required by boringssl
- Install Perl
- (Optional) Install Ninja (choco install ninja)
項目獲取
git clone --recurse-submodules -b v1.28.1 https://github.com/grpc/grpc
正如前面提到了,在不借助梯子的情況下,git clone幾乎無法成功拷貝下grpc及其子模塊。因此我們選擇自己手動去下載grpc項目及其依賴的項目。
獲取grpc源文件
獲取依賴模塊
.gitmodules裏面有grpc依賴的模塊的信息,包括版本與獲取方法。但是不建議通過該模塊中記錄的信息來獲取子模塊,因爲Windows版GRPCPP SDK並不需要裏面記錄的所有子模塊,而且
Windows版GRPCPP SDK需要的子模塊如下:
- ZIP
- abseil-cpp
- boringssl-with-bazel
- cares
- protobuf
通過下面的的方式獲取子模塊的下載地址
將獲取到5個子模塊的源碼按照.gitmodules中的路徑存放。尤其注意cares並不是直接放在third_party/cares中。
編譯並安裝GRPCPP SDK
1. 進入grcp項目的根目錄
2. md .build
3. pushd .build
# 第4步將會在.build生成VS2015項目,之後可以選擇用VS2015生成SDK,也可以繼續用cmake 生成SDK
4. cmake .. -G "Visual Studio 14 2015" -Wno-dev -DCMAKE_INSTALL_PATH="grpc sdk安裝路徑" -DgRPC_INSTALL=ON
5. cmake --build . --config [Release|Debug]
6. cmake --install . --config [Release|Debug]
安裝GRPCPP SDK到指定目錄的好處在後面會提到。
編譯helloworld示例
1. 進入example/cpp/helloworld
2. md .build
3. cd .build
4. cmake .. -G "Visual Studio 14 2015" -Wno-dev -DCMAKE_PREFIX_PATH="grpc sdk安裝路徑"
5. cmake --build . --config [Release|Debug]
因爲我們在前面將grpc sdk安裝到了指定目錄,因此在第4步我們可以通過CMAKE_PREFIX_PATH來讓camke找到protoc工具、相關頭文件與庫。雖然不安裝grpc sdk也同樣可以構建項目,但要麻煩些。
構建自定義項目
構建全新的項目
1. 進入項目根目錄
2. 定義proto文件
3. 將helloworld目錄下的CMakeLists.txt拷貝到當前目錄
4. 修改CMakeLists.txt
a. 設置項目名稱
project(HelloWorld C CXX)
b. 設置proto文件
get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE)
get_filename_component(hw_proto_path "${hw_proto}" PATH)
c. 以下設置非必須,只是用於protoc生成文件時的提示信息
set(hw_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.cc")
set(hw_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.h")
set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.cc")
set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.h")
d. 添加工程。
foreach(_target
greeter_client greeter_server
greeter_async_client greeter_async_client2 greeter_async_server)
add_executable(${_target} "${_target}.cc"
${hw_proto_srcs}
${hw_grpc_srcs})
target_link_libraries(${_target}
${_REFLECTION}
${_GRPC_GRPCPP}
${_PROTOBUF_LIBPROTOBUF})
endforeach()
5. md .build
6. pushd .build
7. cmake .. -G "Visual Studio 14 2015" -Wno-dev -DCMAKE_PREFIX_PATH="grpc sdk安裝路徑"
8. 使用VS2015打開項目,運行生成命令就可以將proto解釋成相應的代碼
將grpc添加到現有項目中
可以通過查看helloworld項目的屬性來將grpc添加到現有項目中。
- 在include路徑中添加${grpc sdk安裝路徑}/include
- 添加依賴庫
因爲依賴的庫比較多,此處就不羅列出來了。 - 編譯proto文件。
$ protoc -I ../../protos --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ../../protos/route_guide.proto
$ protoc -I ../../protos --cpp_out=. ../../protos/route_guide.proto
- 將生成的文件添加到工程中
參考
https://grpc.io/docs/quickstart/cpp/
https://github.com/grpc/grpc/blob/master/BUILDING.md