首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用CMake查找Protobuf软件包

用CMake查找Protobuf软件包
EN

Stack Overflow用户
提问于 2022-05-12 15:52:21
回答 1查看 495关注 0票数 0

我似乎无法让CMake不断地找到我的原生质包。我想将protobuf源代码包括在内,并将其构建为我项目的一部分。我正在使用原产3.15.8protobuf c 1.3.3 (用作控制示例)。

这是示例的目录设置:

代码语言:javascript
运行
复制
- CMakeLists.txt
- deps/
       - CMakeLists.txt
       - protobuf/            # The protobuf 3.15.8 repository
       - protobuf-c/          # The protobuf-c 1.3.3 repository
- target/
         - CMakeLists.txt

CMakeLists.txt

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.15)
project(PROTOBUF_IMPORT_FAIL)
add_subdirectory(deps)
add_subdirectory(target)

deps/CMakeLists.txt

代码语言:javascript
运行
复制
add_subdirectory(protobuf/cmake)
set(Protobuf_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake/lib")
set(Protobuf_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/protobuf/src")
set(Protobuf_PROTOC_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake/libprotoc.a")
add_subdirectory(protobuf-c/build-cmake)

target/CMakeLists.txt

代码语言:javascript
运行
复制
set(Protobuf_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/../deps/protobuf/cmake/lib")
set(Protobuf_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}../deps/protobuf/src")
message("This is the problem!")
FIND_PACKAGE(Protobuf REQUIRED)

一旦一切就绪,我就可以尝试运行cmake

代码语言:javascript
运行
复制
mkdir build
cd build
cmake ..

不幸的是,这最终给了我以下错误:

代码语言:javascript
运行
复制
CMake Error at /usr/local/Cellar/cmake/3.23.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Protobuf (missing: Protobuf_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.23.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.23.0/share/cmake/Modules/FindProtobuf.cmake:650 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  target/CMakeLists.txt:7 (FIND_PACKAGE)

如果有帮助的话,下面是一些环境信息:

代码语言:javascript
运行
复制
$ uname -a
Darwin coop-mac 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64 x86_64
$ cmake --version
cmake version 3.23.0

protobuf-c也是套餐,但它实际上是成功的。为什么从目标中寻找它却找不到它,我如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2022-05-12 22:26:10

find_package用于查找已安装的库。安装的库通常是由cmake附带的脚本(所谓的find-模块)找到的,或者是因为库提供了配置脚本(比如profobuf config.cmake或profobuf- script ts.cmake)。后者是在库构建和安装之后生成的。这可能是第二个配置步骤成功的原因。

您不希望链接到已安装的库,而是自己构建库。所以,您所需要做的就是使用add_subdirectory添加子文件夹(不要添加cmake子文件夹,它根据protobuf是不推荐的)。之后,您可以使用target_link_libraries将protobuf链接到您的目标,而无需使用find_package

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72218667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档