You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用find_package的PATHS选项指定本地安装的protobuf包

问题

我是CMake新手,对其细节了解有限。此前我查阅了一篇相关帖子,尝试使用find_package的PATHS选项,指定项目使用build/third_party目录下本地安装的protobuf包,而非系统默认路径中的版本。

我在项目的CMakeLists.txt中添加了如下配置片段:

#a snippet of the CMakeLists.txt
message("========================>FROM SERVERLESS<======================")

cmake_minimum_required(VERSION 3.13)

project(svgpu-manager C CXX)

list(APPEND CMAKE_MODULE_PATH)

set(protobuf_MODULE_COMPATIBLE TRUE)
# find_package(Protobuf CONFIG REQUIRED)
find_package(Protobuf CONFIG REQUIRED PATHS "${CMAKE_BINARY_DIR}/third_party/") #### line 11
# find_package(OpenCV 3.1 EXACT REQUIRED PATHS /usr/local/opencv3.1)
message(STATUS "Using protobuf ${Protobuf_VERSION}")
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)
set(_REFLECTION gRPC::grpc++_reflection)

find_program(_PROTOBUF_PROTOC protoc PATHS "${CMAKE_BINARY_DIR}/third_party/")

###The CMakeLists.txt file continues...

但执行cmake命令时,得到如下输出:

...
...
========================>FROM SERVERLESS<======================
CMake Warning at /usr/local/lib/cmake/protobuf/protobuf-config.cmake:9 (find_package):
  Found package configuration file:                                                                                            
                                                                                                                               
    /usr/local/lib/cmake/absl/abslConfig.cmake                                                                                 
                                                                                                                               
  but it set absl_FOUND to FALSE so package "absl" is considered to be NOT                                                     
  FOUND.  Reason given by package:                                                                                             
                                                                                                                               
  The following imported targets are referenced, but are missing:                                                            
  protobuf::gmock                                                                                                              
                                                                                                                               
Call Stack (most recent call first):                                                                                           
  worker/serverless_gpu/CMakeLists.txt:11 (find_package)                                                                       
                                                                                                                               
                                                                                                                               
-- Using protobuf 24.0.0
-- Using gRPC 1.59.0-dev

...
...

可以看到find_package忽略了PATHS参数,仍使用了系统默认路径的protobuf包,请问该如何解决此问题?

解决方法
  • 修正PATHS路径指向:PATHS需要精准指向protobuf配置文件所在的目录,而非仅到third_party。本地安装的protobuf通常会在third_party/lib/cmake/protobuf或third_party/cmake下生成protobuf-config.cmake,补全路径后再尝试:

    find_package(Protobuf CONFIG REQUIRED PATHS "${CMAKE_BINARY_DIR}/third_party/lib/cmake/protobuf/")
    

    先检查build/third_party下的目录结构,确认配置文件的实际位置。

  • 添加NO_DEFAULT_PATH强制优先本地包:如果CMake仍优先加载系统包,在find_package中加入NO_DEFAULT_PATH参数,限制仅从指定路径查找:

    find_package(Protobuf CONFIG REQUIRED PATHS "${CMAKE_BINARY_DIR}/third_party/lib/cmake/protobuf/" NO_DEFAULT_PATH)
    

    注意:该参数会完全禁用默认路径查找,若本地protobuf依赖其他系统包,需额外处理依赖查找。

  • 通过CMAKE_PREFIX_PATH全局指定优先路径:在调用find_package前,将本地protobuf的根目录添加到CMAKE_PREFIX_PATH,CMake会优先从该路径下查找包配置:

    list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/third_party/")
    find_package(Protobuf CONFIG REQUIRED)
    

    这种方式更通用,适合多依赖包的场景。

  • 确认本地protobuf的完整性:确保本地protobuf通过cmake --install或类似方式正确安装到build/third_party,生成了完整的配置文件(如protobuf-config.cmake、protobuf-config-version.cmake)。若为预编译包,需确认配置文件存在。

内容的提问来源于stack exchange,提问作者Abhishek Ghosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:40:43