【问题标题】:Unexpected path to libprotocd.lib after add gRPC::grpc++ library dependence in CMake在 CMake 中添加 gRPC::grpc++ 库依赖后 libprotocd.lib 的意外路径
【发布时间】:2019-10-10 14:57:38
【问题描述】:

我有一个由柯南编译的 gRPC 1.23.0(所有依赖项也由柯南解决)。 我有一个使用 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\3.9.1\kpa_conan\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\lib\libprotobufd.lib <-- (1)
C:\.conan\data\grpc\1.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\grpc++.lib
libprotocd.lib   <-- (2)
libprotobufd.lib  <-- (3)
C:\.conan\data\grpc\1.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\grpc.lib
C:\.conan\data\grpc\1.23.0\kpa_conan\stable\package\d85cccdf40588ac852bd1445d45838487543194f\lib\gpr.lib
C:\.conan\data\c-ares\1.15.0\kpa_conan\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\lib\cares.lib
C:\.conan\data\grpc\1.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 的这种奇怪的无效路径?

【问题讨论】:

    标签: visual-studio cmake grpc conan


    【解决方案1】:

    要正确链接到 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

    【讨论】:

      【解决方案2】:

      我找到了解决方法:

      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

      【讨论】:

      • 您是否尝试只做target_link_libraries(${PROJECT_NAME} PUBLIC ${CONAN_PKG::grpc})
      • Syntax error in cmake code at CMakeLists.txt:66 when parsing string ${CONAN_PKG::grpc} Invalid character (':') in a variable name: 'CONAN_PKG'
      • 对不起,我在那里打错了。命令应该类似于:target_link_libraries(${PROJECT_NAME} PUBLIC CONAN_PKG::grpc)。没有花括号。此处有关此方法的更多详细信息:docs.conan.io/en/latest/integrations/build_system/cmake/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多