Cmake: найти пакет protobuf в пользовательском каталоге - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть 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()

Но как указать мое пользовательское дерево каталогов для cmake, чтобы найти необходимые вещи.

Если я использую find_package( Protobuf REQUIRED PATHS ${PROTOBUF_ROOT}/bin/lib/cmake/protobuf ), тогда я вижу следующий вывод из cmake:

Protobuf version : 3.6.1
Protobuf include path : 
Protobuf libraries :

Как мне сделать, чтобы cmake нашел пути к путям, библиотекам и компилятору protoc?

1 Ответ

0 голосов
/ 06 декабря 2018

Наконец-то у меня есть решение - может быть, это сэкономит много времени кому-то еще

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()
...