Conan构建HIDAPI后CMake编译失败:头文件缺失问题求助
解决Conan构建HIDAPI库后CMake编译找不到头文件的问题
1. 确保Conan与CMake的集成流程正确
Conan管理的依赖需要通过工具链或生成的配置文件把依赖信息传递给CMake,不能仅靠find_package:
- 先执行Conan安装命令生成必要文件(以Conan 2.x为例):
conan install . --output-folder=build --build=missing - 执行CMake时必须指定Conan生成的工具链文件:
若使用Conan 1.x,需生成cmake .. -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Releasecmake或cmake_find_package生成器,再引入conanbuildinfo.cmake。
2. 修正CMakeLists.txt的依赖引用方式
不要手动用include_directories,依赖的头文件路径和链接库应通过Conan生成的目标自动处理:
cmake_minimum_required(VERSION 3.15) project(your_project) # Conan 2.x+工具链模式下直接find_package find_package(hidapi REQUIRED) add_executable(your_target src/main.cpp) # 链接Conan提供的hidapi目标,自动注入头文件路径和链接参数 target_link_libraries(your_target PRIVATE hidapi::hidapi)
如果是Conan 1.x,需先引入Conan生成的配置:
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup(TARGETS) # 后续同样用target_link_libraries链接hidapi::hidapi
3. 检查Conan依赖声明的正确性
确保你的conanfile.txt或conanfile.py正确声明了hidapi依赖并配置了合适的生成器:
示例conanfile.txt:
[requires] hidapi/0.14.0 [generators] cmake_find_package cmake_toolchain
4. 消除源码构建的HIDAPI冲突
如果项目中同时存在源码形式的HIDAPI文件(hid.c、hidapi.h等),会和Conan管理的包产生冲突:
- 移除项目中自带的HIDAPI源码文件,完全依赖Conan提供的预构建包
- 若必须使用源码构建HIDAPI,需移除Conan相关的
find_package配置,改用add_subdirectory(hidapi)引入源码,再链接本地生成的hidapi目标
5. 验证依赖路径是否正确
可以在CMakeLists.txt中添加调试输出,确认Conan是否正确传递了头文件路径:
message(STATUS "hidapi include directories: ${hidapi_INCLUDE_DIRS}")
编译时添加-v参数查看实际编译命令,检查是否包含了正确的头文件搜索目录。
内容的提问来源于stack exchange,提问作者Dmitriy Bobrov
相关产品推荐
相关产品推荐

