【发布时间】:2018-12-06 12:10:56
【问题描述】:
我有 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 编译器?
【问题讨论】:
-
对于提示 CMake 关于安装 protobuf 的路径,您可以使用 CMAKE_PREFIX_PATH 变量,如我的回答中所述:stackoverflow.com/questions/34795816/…。选项
PATH不是此类提示的正确方式,它改变了find_package()的模式(从MODULE到CONFIG),所以普通的documentation不适用。 -
这不起作用:我添加了列表(APPEND CMAKE_PREFIX_PATH ${PROTOBUF_ROOT}/bin)但仍然看到相同的输出
-
无论如何,从调用
find_package(Protobuf)中删除PATH选项。如果这不起作用,那么您可能会提示错误的安装前缀。通常安装前缀有lib/和include/子目录,
标签: c++ cmake protocol-buffers