Я не уверен, является ли ошибка в protobuf или в модуле CMake, но здесь у вас есть несколько вариантов.
Если вызов find_package
преуспевает, у вас должен быть доступ как к пути protobuf include, так и к protoc-компилятору. Вы можете прочитать содержимое ${PROTOBUF_INCLUDE_DIRS}/google/protobuf/stubs/common.h
и выполнить поиск по регулярному выражению для #define GOOGLE_PROTOBUF_VERSION
, или вы можете вызывать protoc --version
и искать результаты для правильной версии.
Таким образом, вариант 1, вы можете сделать:
find_package(Protobuf ${PROTOBUF_VERSION} REQUIRED)
if(NOT EXISTS "${PROTOBUF_INCLUDE_DIRS}/google/protobuf/stubs/common.h")
message(FATAL_ERROR "Failed to find protobuf headers")
endif()
file(STRINGS "${PROTOBUF_INCLUDE_DIRS}/google/protobuf/stubs/common.h" Found
REGEX "#define GOOGLE_PROTOBUF_VERSION 2004001")
if(NOT Found)
message(FATAL_ERROR "Didn't find v2.4.1 of protobuf")
endif()
или для варианта 2:
find_package(Protobuf ${PROTOBUF_VERSION} REQUIRED)
if(NOT PROTOBUF_PROTOC_EXECUTABLE)
message(FATAL_ERROR "Failed to find protoc")
endif()
execute_process(COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --version
OUTPUT_VARIABLE VersionInfo)
string(FIND "${VersionInfo}" "2.4.1" Found)
if(Found LESS 0)
message(FATAL_ERROR "Didn't find v2.4.1 of protobuf")
endif()
это работает) Я chosed 2-й вариант! – blackbass1988