Неожиданный путь к libprotocd.lib после добавления зависимости библиотеки gRPC :: grpc ++ в CMake - PullRequest
1 голос
/ 10 октября 2019

У меня есть gRPC 1.23.0, скомпилированный с помощью conan (и все зависимости также разрешены с помощью conan). И у меня есть проект CMake, который использует библиотеку grpc:

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

Когда я генерирую проект VS из этого свойства CMakeLists.txt в Linker - Input - Addition Dependencies, у меня есть следующее значение:

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.lib и libprotobufd.lib?

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Для правильной связи с целями 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

0 голосов
/ 11 октября 2019

Я нашел обходное решение:

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

...