Требуемая цель protobuf :: libprotobuf-lite или protobuf :: libprotobuf не определена - PullRequest
0 голосов
/ 03 февраля 2019

У меня ошибка при попытке скомпилировать приложение Valhalla. Я пытался скомпилировать этот код, используя CMAKE:

find_package(Protobuf REQUIRED)
message("   --> PROTOBUF LIB: ${PROTOBUF_LIBRARIES}")
message("   --> PROTOBUF INCLUDE: ${PROTOBUF_INCLUDE_DIRS}")
message("   --> PROTOBUF VERSION: ${Protobuf_VERSION}")
message("   --> PROTOBUF Found: ${Protobuf_FOUND}")

if(EXISTS protobuf::libprotobuf-lite)
  set(valhalla_protobuf_targets protobuf::libprotobuf-lite)
elseif(EXISTS protobuf::libprotobuf)
  set(valhalla_protobuf_targets protobuf::libprotobuf)
else()
  message(FATAL_ERROR "Required target protobuf::libprotobuf-lite or protobuf::libprotobuf is not defined")
endif()

Это код CMAKE, который выдает ошибку:

-- Found Protobuf: /usr/local/lib/libprotobuf.so;-pthread;-pthread (found version "3.6.1")
--> PROTOBUF LIB: /usr/local/lib/libprotobuf.so;-pthread;-pthread
--> PROTOBUF INCLUDE: /usr/local/include
--> PROTOBUF VERSION: 3.6.1
--> PROTOBUF Found: TRUE
CMake Error at CMakeLists.txt:143 (message):
Required target protobuf::libprotobuf-lite or protobuf::libprotobuf is not defined

Я не понимаю, почему этот код выдает ошибку «Требуется целевой protobuf :: libprotobuf-lite или protobuf :: libprotobuf не определен»

Я пытался изменить EXISTS на TARGET, но ничего не происходит, результатэто то же самое

if(TARGET protobuf::libprotobuf-lite)
 set(valhalla_protobuf_targets protobuf::libprotobuf-lite)
elseif(TARGET protobuf::libprotobuf)
 set(valhalla_protobuf_targets protobuf::libprotobuf)
else()
 message(FATAL_ERROR "Required target protobuf::libprotobuf-lite or protobuf::libprotobuf is not defined")
endif()

Кто-нибудь может мне помочь?Я потратил около 2 дней, чтобы решить это

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

После того, как я собрал cmake 3.13 и установил его, я попытался собрать valhall, но все равно ничего не получилось .... я сломал голову, но не понял, что причина была ">":

if(TARGET protobuf::libprotobuf-lite>)
  set(valhalla_protobuf_targets protobuf::libprotobuf-lite)
elseif(TARGET protobuf::libprotobuf>)
  set(valhalla_protobuf_targets protobuf::libprotobuf)
else()
  message(FATAL_ERROR "Required target protobuf::libprotobuf-lite or protobuf::libprotobuf is not defined")
endif()

После того как я удалил ">", сборка прошла успешно!

0 голосов
/ 03 февраля 2019

В скрипте FindProtobuf.cmake из версии 3.7 нет понятия о protobuf::* целях: скрипт устанавливает только переменные.Импортируемые цели устанавливаются скриптом начиная с версия 3.9 .

...