【问题标题】:PROTOBUF_GENERATE_CPP binary pathPROTOBUF_GENERATE_CPP 二进制路径
【发布时间】:2017-07-22 21:14:11
【问题描述】:

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/ 中,而不是在系统文件夹中。但是为什么protobuf在系统路径中寻找包含,当我明确声明根路径为myfolder/

【问题讨论】:

    标签: cmake protoc


    【解决方案1】:

    模块FindProtobuf.cmake 有一个很好的description 如何用各种东西提示它。例如,可以通过设置 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

    【讨论】:

    • 我稍微修改了这个问题。问题的根源在于包含文件夹而不是二进制文件。
    • 这些对我的构建都没有任何作用。设置(Protobuf_PROTOC_EXECUTABLE ${grpc_SOURCE_DIR}/bin/protoc)CMake 错误在 /usr/share/cmake3/Modules/FindPackageHandleStandardArgs.cmake:164(消息):找不到 Protobuf(缺少:Protobuf_PROTOC_EXECUTABLE)(找到版本“3.13.0.0” )
    • Protobuf_PROTOC_EXECUTABLE 应该是一个 CACHE 变量:在命令行中使用-D 选项设置它或使用CACHE 选项在CMakeLists.txt 中设置它(参见@987654323 @)。
    猜你喜欢
    • 1970-01-01
    • 2022-07-16
    • 2015-04-17
    • 1970-01-01
    • 2023-03-11
    • 2013-11-06
    • 2016-04-14
    • 2013-08-19
    • 1970-01-01
    相关资源
    最近更新 更多