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

CMake无法找到通过apt安装的libcoap3包,求解决方法

解决CMake找不到apt安装的libcoap3依赖问题

问题背景

在Linux环境下用CMake构建C++应用,vcpkg管理大部分依赖,但因vcpkg无libcoap3端口,通过apt install libcoap3-dev安装该依赖。执行CMake配置时,始终提示找不到libcoapConfig.cmake或libcoap-config.cmake文件,无法定位libcoap3包。

构建步骤

cmake --preset=default
cmake --build build

相关CMakeLists.txt代码

cmake_minimum_required(VERSION 3.21)
project(test VERSION 3.0 LANGUAGES C CXX)

# ... 省略部分代码 ...

find_package(coap REQUIRED) 
add_executable(test main.cxx)
target_link_libraries(test PRIVATE coap::coap)

错误信息

CMake Error at /home/pi/vcpkg/scripts/buildsystems/vcpkg.cmake:898 (_find_package):
By not providing "Findlibcoap.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "libcoap", but
CMake did not find one.

Could not find a package configuration file provided by "libcoap" with any
of the following names:

libcoapConfig.cmake
libcoap-config.cmake

Add the installation prefix of "libcoap" to CMAKE_PREFIX_PATH or set
"libcoap_DIR" to a directory containing one of the above files. If
"libcoap" provides a separate development package or SDK, be sure it has
been installed.
Call Stack (most recent call first):
CMakeLists.txt:11 (find_package)

解决方案

方法一:直接指定头文件与库路径(最简单)

apt安装的libcoap3-dev默认将头文件放在/usr/include/coap3/,库文件放在/usr/lib/(arm架构可能是/usr/lib/arm-linux-gnueabihf/或/usr/lib/aarch64-linux-gnu/)。修改CMakeLists.txt,绕过find_package直接配置:

cmake_minimum_required(VERSION 3.21)
project(test VERSION 3.0 LANGUAGES C CXX)

# ... 省略部分代码 ...

add_executable(test main.cxx)
# 添加libcoap3头文件路径
target_include_directories(test PRIVATE /usr/include/coap3)
# 链接libcoap3库
target_link_libraries(test PRIVATE coap-3)

方法二:自定义Find模块适配find_package

如果希望保留find_package的写法,可手动编写CMake查找模块:

  1. 在项目根目录创建cmake/modules文件夹
  2. 创建cmake/modules/Findlibcoap.cmake,内容如下:
find_path(LIBCOAP_INCLUDE_DIR NAMES coap3/coap.h)
find_library(LIBCOAP_LIBRARY NAMES coap-3)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(libcoap DEFAULT_MSG LIBCOAP_LIBRARY LIBCOAP_INCLUDE_DIR)

if(LIBCOAP_FOUND)
    add_library(coap::coap UNKNOWN IMPORTED)
    set_target_properties(coap::coap PROPERTIES
        IMPORTED_LOCATION "${LIBCOAP_LIBRARY}"
        INTERFACE_INCLUDE_DIRECTORIES "${LIBCOAP_INCLUDE_DIR}"
    )
endif()

mark_as_advanced(LIBCOAP_INCLUDE_DIR LIBCOAP_LIBRARY)
  1. 在CMakeLists.txt开头添加模块路径,调整find_package命令:
cmake_minimum_required(VERSION 3.21)
project(test VERSION 3.0 LANGUAGES C CXX)

# 添加自定义CMake模块路径
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

# ... 省略部分代码 ...

find_package(libcoap REQUIRED) 
add_executable(test main.cxx)
target_link_libraries(test PRIVATE coap::coap)

方法三:检查并指定系统配置文件路径(如果存在)

部分版本的libcoap-dev包可能自带CMake配置文件,先搜索系统中是否存在:

sudo find /usr -name "*libcoap*.cmake"

如果找到类似/usr/lib/cmake/libcoap/libcoapConfig.cmake的文件,配置CMake时指定路径:

cmake --preset=default -Dlibcoap_DIR=/usr/lib/cmake/libcoap

或在CMakeLists.txt中提前设置:

set(libcoap_DIR "/usr/lib/cmake/libcoap" CACHE PATH "libcoap CMake配置文件路径")
find_package(coap REQUIRED)

内容的提问来源于stack exchange,提问作者Dark Sorrow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:44:51