在Windows上編譯GRPCPP SDK

工具準備

  1. Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used)
  2. (Optional) Install Git。如果不借助梯子,git clone獲取grpc項目超高概率失敗
  3. Install CMake
  4. Install NASM and add it to PATH (choco install nasm) - required by boringssl。安裝好後,主要將其安裝目錄添加到PATH中
  5. Install Go - required by boringssl
  6. Install Perl
  7. (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需要的子模塊如下:

  1. ZIP
  2. abseil-cpp
  3. boringssl-with-bazel
  4. cares
  5. 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添加到現有項目中。

  1. 在include路徑中添加${grpc sdk安裝路徑}/include
    在這裏插入圖片描述
  2. 添加依賴庫
    在這裏插入圖片描述
    因爲依賴的庫比較多,此處就不羅列出來了。
  3. 編譯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
  1. 將生成的文件添加到工程中

參考

https://grpc.io/docs/quickstart/cpp/
https://github.com/grpc/grpc/blob/master/BUILDING.md

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章