gRPC cmake Visual Studio编译安装 (全命令行)

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安装在什么位置.

小记: 
在gRPC官网中提供的编译命令是这样的(需要提前设定MY_INSTALL_DIR环境变量)

```shell
> mkdir "cmake\build"
> pushd "cmake\build"
> cmake -DgRPC_INSTALL=ON -DCMAKE_INSTALL_PREFIX=%MY_INSTALL_DIR% -DgRPC_BUILD_TESTS=OFF ..\..
> cmake --build . --config Release --target install
> popd

这里build和install写在一起的, 不知道有没有优化, 但是我发现了下面一点.

他会将一些东西安装到C:/Program Files(x86)/grpc中, 这个路径的写入是需要管理员权限的, 如果你使用官网的命令, 请确保你当前的shell具有管理员权限.




### 0x03 开始编译

```shell
cmake --build . --config Debug --target ALL_BUILD

默认是的config是Release, 我这里编译Debug. (你可以选择Release或者Debug)

这里编译的时间会比较长, 大约10分钟(根据电脑性能而异)

0x04 安装库

cmake --install . --config Debug		# 需要和上面的Release或者Debug相同,

如果你编译的是Debug, 但是没有指定--config Debug会出现问题, 他会按照Release的规则找文件. (导致编译后文件找不到, 安装失败)

到这里就安装结束了, 请你到你设定的cmake选项中CMAKE_INSTALL_PREFIX(也就是安装位置)去找编译好的grpc库文件.

posted @ 2024-11-14 21:28  QU头  阅读(35)  评论(0编辑  收藏  举报