【问题标题】:CMake with gRPC cannot find gRPCTargets.cmake带有 gRPC 的 CMake 找不到 gRPCTargets.cmake
【发布时间】: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",正如grpcCMakeLists.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 中的解决方案。如果可行,我将制定一个答案,以便其他人可以找到它。

标签: cmake grpc


【解决方案1】:

https://github.com/grpc/grpc/issues/13841解释了这个问题的原因:

由于我们当前 CMakeLists.txt 的一些限制,安装目标(请参阅 gRPC_INSTALL 选项)仅在您使用我们的依赖项的预安装版本进行构建时才会生成(在您的情况下,gRPC_CARES_PROVIDER 需要设置为 package )。

您看到的警告“gRPC_INSTALL 将被强制为 FALSE,因为 gRPC_CARES_PROVIDER”是“模块”基本上告诉您,即使您将 gRPC_INSTALL 设置为 ON,我们也将其设置回 OFF,因为您的 gRPC_CARES_PROVIDER 设置为使用来自 git 子模块的 c-ares(与当前的 CMakeLists.txt 不兼容) - 所以你不应该期望安装任何东西(甚至 grpc_cpp_plugin。

要解决此问题,您应该在调用 cmake 时仔细查看输出。对于每个报告为“模块”的gRPC_*_PROVIDER,您应该强制它与-DgRPC_CARES_PROVIDER=package“打包”(然后确保安装包!)

或者只是使用问题中链接的命令行强制执行所有操作:

 cmake -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DCMAKE_BUILD_TYPE=Release ../.. 

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 2018-11-27
    • 2022-07-23
    • 2017-05-01
    • 2017-12-25
    • 1970-01-01
    • 2015-11-23
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多