gRPC cmake Visual Studio編譯安裝 (全命令列)

QU头發表於2024-11-14

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庫檔案.

相關文章