CMake не может найти Protobuf `protobuf_generate_cpp` - PullRequest
0 голосов
/ 27 сентября 2018

Использование

find_package(Protobuf REQUIRED
    PATHS ${PROTOBUF_SEARCH_PATH}
)

if (NOT ${Protobuf_FOUND})
    message( FATAL_ERROR "Could not find Protobuf!" )
endif()    

protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS Foo.proto)

Я получаю сообщение об ошибке Unknown CMake command "protobuf_generate_cpp".Если я проверяю папку установки Protobuff, появляется файл CMake <istall path>/cmake/protobuf-module.cmake, который содержит определение функции.

CMake    version: 3.10.2
Protobuf version: 3.6.1

В чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вам нужно protobuf_MODULE_COMPATIBLE.

Я использую CMake3.14.Последние 3 строки protobuf-config.cmake:

if(protobuf_MODULE_COMPATIBLE)
  include("${CMAKE_CURRENT_LIST_DIR}/protobuf-module.cmake")
endif()

и protobuf_generate_cpp() определены в protobuf-module.cmake.

Итак, чтобы protobuf_generate_cpp(), люди должны повернуть protobuf_MODULE_COMPATIBLE on в их CMakeLists.txt:

set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")

Не забудьте очистить ранее созданные файлы кэша cmake, а затем снова вызвать cmake.

0 голосов
/ 18 января 2019

Похоже, API-интерфейс cmake немного изменился.Попробуйте изменить его на

protobuf_generate(
 LANGUAGE cpp
 TARGET <YOUR_TARGET_NAME> 
 PROTOS Foo.proto)

. Это приведет к прямому добавлению сгенерированных файлов в исходный список цели.Посмотрите на функцию protobuf_generate в protobuf-config.cmake для новых опций.

...