在 CMake 中添加 gRPC::grpc++ 库依赖后指向 libprotocd.lib 的意外路径

Unexpected path to libprotocd.lib after add gRPC::grpc++ library dependence in CMake

我有一个由 conan 编译的 gRPC 1.23.0(所有依赖项也由 conan 解析)。 我有一个使用 grpc 库的 CMake 项目:

set (LIB_DEPS
  protobuf::libprotobuf
  gRPC::grpc++
)
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIB_DEPS})

当我在 Linker - Input - Addition Dependencies 属性 中从这个 CMakeLists.txt 生成一个 VS 项目时,我有下一个值:

C:\.conan\data\protobuf.9.1\kpa_conan\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\lib\libprotobufd.lib <-- (1)
C:\.conan\data\grpc.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\grpc++.lib
libprotocd.lib   <-- (2)
libprotobufd.lib  <-- (3)
C:\.conan\data\grpc.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\grpc.lib
C:\.conan\data\grpc.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\gpr.lib
C:\.conan\data\c-ares.15.0\kpa_conan\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\lib\cares.lib
C:\.conan\data\grpc.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\address_sorting.lib
wsock32.lib
kernel32.lib

(1) - 预期的有效路径,我在 CMakeLists.txt

中添加

(2),(3) - 意外且无效的路径,由 gRPC::grpc++CMakeLists.txt 中添加。 如果我将 gRPC::grpc++ 更改为 gRPC::grpc,第 (2) 和 (3) 行将消失,但 grpc++.lib 的路径也会消失,但我需要它。

如何避免这种通往 libprotocd.liblibprotobufd.lib 的奇怪的无效路径?

我找到了解决方法:

find_library(GRPC_GRPC++_LIBRARY NAMES grpc++)
set (LIB_DEPS
  protobuf::libprotobuf
  gRPC::grpc
  ${GRPC_GRPC++_LIBRARY NAMES}
)
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIB_DEPS})

并在 gRPC 存储库中打开了关于它的问题:https://github.com/grpc/grpc/issues/20578

要正确地link针对 grpc 目标,您可以使用:

target_link_libraries(${PROJECT_NAME} PUBLIC CONAN_PKG::grpc)

这应该包含所需的一切。 有关此方法的更多详细信息,请参见:https://docs.conan.io/en/latest/integrations/build_system/cmake/cmake_generator.html#targets-approach