Ubuntu 20.04下CMake配置libusb依赖找不到USB1包如何解决
问题根因
你当前触发了CMake find_package 的配置模式查找逻辑,但libusb官方源码默认不提供USB1Config.cmake这类配置文件,正常走模块模式查找才对,查找失败的核心原因是你拷贝的FindUSB1.cmake没有被CMake正确识别加载。
解决方法
你可以二选一使用以下方案:
方案1:修复现有Find模块加载逻辑
- 第一步:确认你从Ubertooth仓库拷贝的文件中包含
FindUSB1.cmake,且该文件确实存放在你指定的模块目录下 - 第二步:在
CMakeLists.txt的find_package(USB1 REQUIRED)代码之前,添加模块路径声明,确保CMake能找到你存放的Find模块:
# 替换后面的路径为你实际存放Find*.cmake文件的项目内相对路径 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
注:Ubertooth能正常编译是因为它的host根目录CMakeLists.txt已经提前把自带的cmake/modules目录加入了全局模块路径,子目录调用find_package时可以直接找到自带的
FindUSB1.cmake走模块模式查找,不需要找配置文件。
方案2:直接用pkgconfig查找(不需要额外带Find模块,更稳定)
Ubuntu安装的libusb-1.0-0-dev自带pkg-config配置文件,你可以直接替换原有find_package逻辑:
# 先查找pkgconfig工具 find_package(PkgConfig REQUIRED) # 通过pkgconfig查找libusb-1.0 pkg_check_modules(USB1 REQUIRED libusb-1.0) # 后续链接你的目标时,直接使用下面的变量即可 # 示例: # target_include_directories(你的目标名 PUBLIC ${USB1_INCLUDE_DIRS}) # target_link_libraries(你的目标名 ${USB1_LIBRARIES}) # target_link_directories(你的目标名 PUBLIC ${USB1_LIBRARY_DIRS})
内容的提问来源于stack exchange,提问作者TechnoSam
相关产品推荐
相关产品推荐

