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库文件.