【发布时间】:2019-12-16 05:54:40
【问题描述】:
我在使用 cmake 构建 grpc cpp helloworld 示例时遇到问题。
我最初使用cmake 构建并安装了grpc,然后直接使用make。
我发现了其他人过去提出的this 问题,该问题已解决。
它似乎没有解决,我为它开了一个新的issue,但我觉得我需要一些时间才能得到一些帮助,所以我来了。
原始问题的 OP 提供了他的 FindGRPC cmake 模块的解决方法,但我不确定如果仍然缺少 gRPCTargets.cmake,这将如何提供帮助。
我在我的 cmake 模块路径中删除了 FindGRPC.cmake,但没有任何变化。
错误是这样的:
CMake Error at /usr/local/lib/cmake/grpc/gRPCConfig.cmake:8 (include):
include could not find load file:
/usr/local/lib/cmake/grpc/gRPCTargets.cmake
Call Stack (most recent call first):
CMakeLists.txt:73 (find_package)
-- Using gRPC 1.20.0
-- Configuring incomplete, errors occurred
我希望能够在我的 cmake 项目中轻松使用 grpc(使用 find_package(gRPC CONFIG REQUIRED))
编辑:
在grpc 上运行cmake 时出现此错误:
gRPC_INSTALL will be forced to FALSE because gRPC_ZLIB_PROVIDER is "module"
这是从zlib.cmake打印出来的:
message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_ZLIB_PROVIDER is \"module\"")
显然所有的提供者都必须是"package",正如grpc的CMakeLists.txt中提到的那样:
set(gRPC_INSTALL ${gRPC_INSTALL_default} CACHE BOOL
"Generate installation target: gRPC_ZLIB_PROVIDER, gRPC_CARES_PROVIDER, gRPC_SSL_PROVIDER and gRPC_PROTOBUF_PROVIDER must all be \"package\"")
我不知道为什么 zlib 在这里是一个模块,或者如何使它成为一个包。
我是否需要以某种方式指定 cmake 以使用已安装的 zlib 而不是子模块?
【问题讨论】:
-
你还有grpc构建目录吗? CMakeCache.txt中gRPC_INSTALL的值是多少?
-
...当您在 gRPC 目录中运行
cmake时,它是否说“gRPC_INSTALL 将被强制为 FALSE”? -
gRPC_INSTALL:BOOL=ON我不记得看到它被强制为假。 -
是的,这是 gRPC_INSTALL 在 cmake 过程中的某个时刻变为错误的直接证据,并且 必须 伴随着警告打印。在 CMakeLists.txt 中将
message("gRPC_INSTALL is now ${gRPC_INSTALL}")设置为 FALSE 之前添加一个message("gRPC_INSTALL is now ${gRPC_INSTALL}")语句(如果我没记错的话,可能有 4 个位置) -
如果您自己还没有找到解决方案,请尝试github.com/grpc/grpc/issues/13841#issuecomment-355510534 中的解决方案。如果可行,我将制定一个答案,以便其他人可以找到它。