0

PROTOBUF_GENERATE_CPP 如何知道从哪里获取 protoc 二进制文件?

我已经在本地编译了 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/ 中,而不是在系统文件夹中。但是,当我将根路径明确声明为 myfolder/ 时,为什么 protobuf 会在系统路径中寻找包含

4

1 回答 1

0

模块FindProtobuf.cmake很好地描述了如何用各种东西来暗示它。例如,可以通过设置Protobuf_PROTOC_EXECUTABLE变量来执行提示:

以下缓存变量也可以设置或使用:

...

Protobuf_PROTOC_EXECUTABLE

协议编译器

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

此外,常见的CMAKE_PREFIX_PATH变量效果很好,请参阅该问题:Hinting Find<name>.cmake Files with a custom directory

于 2017-07-21T22:54:49.267 回答