PROTOBUF_GENERATE_CPP двоичный путь

Как PROTOBUF_GENERATE_CPP узнает, где взять двоичный файл с протоколом?

Я скомпилировал protobuf локально и хотел бы указать мой CMakeLists.txt на установленный двоичный файл ( myfolder/protobuf-install/bin/protoc), а не на системный двоичный файл (/ usr / bin / protoc)

Обычно для Boost я просто устанавливаю BOOST_ROOT в мою установленную папку, и он находит все include_directories, библиотеки и т. Д.

Как это должно быть сделано для Protobuf. Я не вижу никакой опции префикса в FindProtobuf.cmake.

set( Protobuf_SRC_ROOT_FOLDER "${CMAKE_SOURCE_DIR}/myfolder/")
find_package(Protobuf MODULE REQUIRED)

Ошибка

file STRINGS file "/usr/include/google/protobuf/stubs/common.h" cannot be read.
Call Stack (most recent call first):
CMakeLists.txt:17 (find_package)

Конечно, указанный выше путь находится в папке myfolder /, а не в системной папке. Но почему protobuf ищет включенные в системный путь, когда я явно объявил корневой путь как myfolder /

1 ответ

Модуль FindProtobuf.cmake есть хорошее описание того, как намекнуть это с различными вещами. Например, подсказка с исполняемым файлом может быть выполнена с установкой переменной Protobuf_PROTOC_EXECUTABLE:

Следующие переменные кэша также доступны для установки или использования:

...

Protobuf_PROTOC_EXECUTABLE

Проток компилятор

cmake -DProtobuf_PROTOC_EXECUTABLE=myfolder/protobuf-install/bin/protoc

Кроме того, общая переменная CMAKE_PREFIX_PATH работает хорошо, см. Этот вопрос: Подсказка Find .cmake Files с пользовательским каталогом.

Другие вопросы по тегам