Cmake:在自定义目录中找到protobuf包

Dmi*_*try 3 c++ cmake protocol-buffers

我有 cmake 3.10.x 并下载了当前的 protobuf 源 3.6.1。使用 cmake,我创建了 bin 目录“{PROTOBUF_SOURCE_DIR}/bin”,在该目录中成功构建了该库。作为下一步,我想在我的基于 cmake 的项目中使用这个自定义树。我有

set ( Protobuf_USE_STATIC_LIBS ON )

find_package( Protobuf REQUIRED )
if ( Protobuf_FOUND )
    message( STATUS "Protobuf version : ${Protobuf_VERSION}" )
    message( STATUS "Protobuf include path : ${Protobuf_INCLUDE_DIRS}" )
    message( STATUS "Protobuf libraries : ${Protobuf_LIBRARIES}" )
else()
    message( WARNING "Protobuf package not found -> specify search path via PROTOBUF_ROOT variable")
endif()
Run Code Online (Sandbox Code Playgroud)

但是如何为 cmake 指定我的自定义目录树以找到必要的东西。

如果我使用,find_package( Protobuf REQUIRED PATHS ${PROTOBUF_ROOT}/bin/lib/cmake/protobuf )那么我会看到 cmake 的以下输出:

Protobuf version : 3.6.1
Protobuf include path : 
Protobuf libraries :
Run Code Online (Sandbox Code Playgroud)

如何让 cmake 找到包含路径、库和 protoc 编译器?

Dmi*_*try 8

最后我有了一个解决方案 - 也许它会为其他人节省很多时间

set ( Protobuf_USE_STATIC_LIBS ON )

include(${PROTOBUF_ROOT}/bin/lib/cmake/protobuf/protobuf-config.cmake)
include(${PROTOBUF_ROOT}/bin/lib/cmake/protobuf/protobuf-module.cmake)
include(${PROTOBUF_ROOT}/bin/lib/cmake/protobuf/protobuf-options.cmake)
include(${PROTOBUF_ROOT}/bin/lib/cmake/protobuf/protobuf-targets.cmake)

find_package( Protobuf REQUIRED HINTS ${PROTOBUF_ROOT}/bin/lib/cmake/protobuf )
if ( Protobuf_FOUND )
    message( STATUS "Protobuf version : ${Protobuf_VERSION}" )
    message( STATUS "Protobuf include path : ${Protobuf_INCLUDE_DIRS}" )
    message( STATUS "Protobuf libraries : ${Protobuf_LIBRARIES}" )
    message( STATUS "Protobuf compiler libraries : ${Protobuf_PROTOC_LIBRARIES}")
    message( STATUS "Protobuf lite libraries : ${Protobuf_LITE_LIBRARIES}")
else()
    message( WARNING "Protobuf package not found -> specify search path via PROTOBUF_ROOT variable")
endif()
Run Code Online (Sandbox Code Playgroud)