gRPC cmake 編譯安裝 (全命令列)
重要前言: 所有在引用框中的命令都不要
輸入!!
cmake --install . # 在引用框中的不要輸入到命令列
cmake --install . --config Debug # 命令沒有被引用框包裹, 需要輸入到命令列中
0x00 環境配置
vs2022, git, cmake, Powershell7<管理員> (理論上Powershell5也行)
0x01 原始碼下載
注意: 建議使用git clone的方式下載, 如果是透過github的Release下載的, 你得手動的配置gRPC的三方依賴(編譯的時候非常麻煩).
git clone --recurse-submodules -b v1.67.1 --depth 1 --shallow-submodules https://github.com/grpc/grpc grpc-1.67.1
--recurse-submodules
或者--recursive(老版本git)
: 表示遞迴clone處理gRPC的子模組依賴. 功能基本相同,但建議使用更新的 --recurse-submodules
.
--depth 1
: 建立淺克隆, 表示僅僅clone提交的最上層, 不用處理所有的提交記錄.
--shallow-submodules
: 配合--depth 1
使用, 將淺克隆行為應用到子模組。也就是說,對於每個子模組,也只會克隆最近的一次提交。
你可以根據實際情況修改版本, 我這裡是 v1.67.1
0x02 cmake編譯前的配置
在專案中建立一個臨時編譯目錄, (我這裡使用的是powershell可使用mkdir, 如果你沒有mkdir命令, 請下載最新的PowerShell) (不要使用古老的cmd了...)
mkdir cmake_build
cd cmake_build
cmake指定原始碼位置和編譯位置(我這裡優先使用命令的方式, 如果需要圖形化的方式(cmake-gui)也有說明)
cmake -S .. -B . -L
-S
指定source目錄,-B
執行build目錄,-L
檢視專案的一些編譯選項如果你不是和我一樣在Windows環境下, 或者你想使用別的編譯器(比如mingw-w64), 你可以使用
-G
引數指定構建編譯器, 在cmake --help
中可以看到cmake預設使用的編譯器.
PS C:\code_dependencies\code_sources\grpc-1.67.1\cmake_build> cmake -S .. -B . -L -- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045. -- ........... 此處省略 -- -- 27.2.0 -- Configuring done (1.0s) -- Generating done (5.2s) -- Build files have been written to: C:/code_dependencies/code_sources/grpc-1.67.1/cmake_build -- Cache values ABSL_BUILD_TESTING:BOOL=OFF ABSL_BUILD_TEST_HELPERS:BOOL=OFF ABSL_GOOGLETEST_DOWNLOAD_URL:STRING= ABSL_LOCAL_GOOGLETEST_DIR:PATH=/usr/src/googletest ABSL_PROPAGATE_CXX_STD:BOOL=OFF ABSL_USE_EXTERNAL_GOOGLETEST:BOOL=OFF ABSL_USE_GOOGLETEST_HEAD:BOOL=OFF ABSL_USE_SYSTEM_INCLUDES:BOOL=OFF BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON CARES_BUILD_CONTAINER_TESTS:BOOL=OFF CARES_BUILD_TESTS:BOOL=OFF CARES_BUILD_TOOLS:BOOL=ON CARES_INSTALL:BOOL=ON CARES_MSVC_STATIC_RUNTIME:BOOL=OFF CARES_RANDOM_FILE:STRING=/dev/urandom CARES_SHARED:BOOL=OFF CARES_STATIC:BOOL=ON CARES_STATIC_PIC:BOOL=OFF CMAKE_CONFIGURATION_TYPES:STRING=Debug;Release;MinSizeRel;RelWithDebInfo CMAKE_INSTALL_PREFIX:PATH=C:/code_dependencies/grpc EXECINFO_LIBRARY:FILEPATH=EXECINFO_LIBRARY-NOTFOUND INSTALL_BIN_DIR:PATH=C:/code_dependencies/grpc/bin INSTALL_INC_DIR:PATH=C:/code_dependencies/grpc/include INSTALL_LIB_DIR:PATH=C:/code_dependencies/grpc/lib INSTALL_MAN_DIR:PATH=C:/code_dependencies/grpc/share/man INSTALL_PKGCONFIG_DIR:PATH=C:/code_dependencies/grpc/share/pkgconfig LIBRT:FILEPATH=LIBRT-NOTFOUND RE2_BUILD_TESTING:BOOL=ON USEPCRE:BOOL=OFF gRPC_ABSL_PROVIDER:STRING=module gRPC_BUILD_CODEGEN:BOOL=ON gRPC_BUILD_GRPCPP_OTEL_PLUGIN:BOOL=OFF gRPC_BUILD_GRPC_CPP_PLUGIN:BOOL=ON gRPC_BUILD_GRPC_CSHARP_PLUGIN:BOOL=ON gRPC_BUILD_GRPC_NODE_PLUGIN:BOOL=ON gRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN:BOOL=ON gRPC_BUILD_GRPC_PHP_PLUGIN:BOOL=ON gRPC_BUILD_GRPC_PYTHON_PLUGIN:BOOL=ON gRPC_BUILD_GRPC_RUBY_PLUGIN:BOOL=ON gRPC_BUILD_MSVC_MP_COUNT:STRING=0 gRPC_BUILD_TESTS:BOOL=OFF gRPC_CARES_PROVIDER:STRING=module gRPC_DOWNLOAD_ARCHIVES:BOOL=ON gRPC_INSTALL:BOOL=ON gRPC_INSTALL_BINDIR:STRING=bin gRPC_INSTALL_CMAKEDIR:STRING=lib/cmake/grpc gRPC_INSTALL_INCLUDEDIR:STRING=include gRPC_INSTALL_LIBDIR:STRING=lib gRPC_INSTALL_SHAREDIR:STRING=share/grpc gRPC_MSVC_STATIC_RUNTIME:BOOL=OFF gRPC_PROTOBUF_PROVIDER:STRING=module gRPC_RE2_PROVIDER:STRING=module gRPC_SSL_PROVIDER:STRING=module gRPC_USE_PROTO_LITE:BOOL=OFF gRPC_ZLIB_PROVIDER:STRING=module protobuf_ABSL_PROVIDER:STRING=module protobuf_ALLOW_CCACHE:BOOL=OFF protobuf_BUILD_CONFORMANCE:BOOL=OFF protobuf_BUILD_EXAMPLES:BOOL=OFF protobuf_BUILD_LIBPROTOC:BOOL=OFF protobuf_BUILD_LIBUPB:BOOL=ON protobuf_BUILD_PROTOBUF_BINARIES:BOOL=ON protobuf_BUILD_PROTOC_BINARIES:BOOL=ON protobuf_BUILD_SHARED_LIBS:BOOL=OFF protobuf_BUILD_TESTS:BOOL=OFF protobuf_DISABLE_RTTI:BOOL=OFF protobuf_INSTALL:BOOL=ON protobuf_INSTALL_EXAMPLES:BOOL=OFF protobuf_JSONCPP_PROVIDER:STRING=module protobuf_MSVC_STATIC_RUNTIME:BOOL=OFF protobuf_TEST_XML_OUTDIR:BOOL=OFF protobuf_WITH_ZLIB:BOOL=OFF utf8_range_ENABLE_INSTALL:BOOL=ON utf8_range_ENABLE_TESTS:BOOL=OFF
如果你想調整編譯選項的開關, 請使用-D選項指定Key=Value, 命令執行過後, 可以不用重複執行.
例如下面的命令指定(在引用框中的不要輸入到命令列)
cmake -S .. -B . -Dprotobuf_BUILD_SHARED_LIBS=ON -Dprotobuf_USE_EXTERNAL_GTEST=OFF -Dprotobuf_WITH_ZLIB=OFF
我的配置是這樣的, 你可以按需修改. (後面的`符號是powershell的換行輸入字元, 如果你是linux, 請替換成\)
cmake -S .. -B . `
-DgRPC_INSTALL=ON `
-DCMAKE_INSTALL_PREFIX="C:\code_dependencies\grpc" `
-DgRPC_BUILD_TESTS=OFF `
-L `
這裡我們指定了
CMAKE_INSTALL_PREFIX
="C:\code_dependencies\protobuf", 用於指定grpc安裝在什麼位置.
0x03 開始編譯
cmake --build . --config Debug --target ALL_BUILD -j 4
預設是的config是Release, 我這裡編譯Debug. (你可以選擇Release或者Debug)
這裡編譯的時間會比較長, 大約10分鐘(根據電腦效能而異)
0x04 安裝庫
cmake --install . --config Debug # 需要和上面的Release或者Debug相同,
如果你編譯的是Debug, 但是沒有指定--config Debug
會出現問題, 他會按照Release的規則找檔案. (導致編譯後檔案找不到, 安裝失敗)
到這裡就安裝結束了, 請你到你設定的cmake選項中CMAKE_INSTALL_PREFIX
(也就是安裝位置)去找編譯好的grpc庫檔案.