在 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.lib
和 libprotobufd.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
我有一个由 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.lib
和 libprotobufd.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