你的一套CMAKE_PREFIX_PATH
是不正确的。它应该指向安装 protobuf 的前缀,而不是包的 cmake 配置文件的位置。
所以尝试改变:
set(CMAKE_PREFIX_PATH
${CMAKE_PREFIX_PATH}
${PROTOBUF_FOLDER}/cmake/build/release/lib/x86_64-linux-gnu/cmake/protobuf
)
To this:
set(CMAKE_PREFIX_PATH
${CMAKE_PREFIX_PATH}
${PROTOBUF_FOLDER}
)
也就是说,假设${PROTOBUF_FOLDER}
指向给定的 --prefix 参数的相同位置./configure --prefix=<INSTALL_PREFIX>
请参阅搜索路径文档find_package
here. https://cmake.org/cmake/help/v3.5/command/find_package.html(大约在页面的一半处)
我相信如果你在 Windows 上,你会像这样工作<prefix>/
是该平台的搜索路径之一。但在基于 Unix 的操作系统上,您可以将这些作为搜索路径(根据上面链接上的文档):
<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/
<prefix>/(lib/<arch>|lib|share)/<name>*/
<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/
这里您还必须注意区分大小写。请注意,在上述路径中,它们搜索的最后一个路径元素是<name>*
。从我在你的问题中看到的来看,protobuf 似乎以以下名称安装自身
'protobuf',但是你的find_package
呼叫正在询问“Protobuf”。因此,也尝试将您的呼叫更改为:
find_package(protobuf CONFIG REQUIRED)
最后,据我所知,protobuf 在通过以下方式进行构建时不会安装 CMake 配置./configure ...
。要安装 CMake 配置,我必须通过 CMake 进行构建:
cd protobuf-3.5/cmake
cmake -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> .
make
make install