CMake编译报错:如何让CMake找到项目内的libhydrogen?
解决CMake找不到项目内libhydrogen库的问题
错误原因
CMake执行find_package(libhydrogen CONFIG REQUIRED)时,会默认在系统路径和CMAKE_PREFIX_PATH指定路径下查找libhydrogenConfig.cmake或libhydrogen-config.cmake配置文件,但你的libhydrogen存放在项目内自定义文件夹中,不在默认搜索路径范围内,因此触发找不到库的错误。
解决方案
根据你项目内libhydrogen的存放形式,选择以下任一配置方式:
方式一:libhydrogen已编译且自带CMake配置文件
如果你的项目内的libhydrogen已经编译完成,且存在libhydrogenConfig.cmake配置文件(例如路径为项目根目录/thirdparty/libhydrogen/cmake),只需在find_package指令前添加路径指定:
# 替换为你项目内libhydrogen配置文件所在的实际目录 set(libhydrogen_DIR "${PROJECT_SOURCE_DIR}/thirdparty/libhydrogen/cmake") find_package(libhydrogen CONFIG REQUIRED)
方式二:libhydrogen已编译但无CMake配置文件
如果仅拥有编译好的库文件(.a/.so)和头文件,手动指定头文件与库文件路径:
- 删除原有的
find_package(libhydrogen CONFIG REQUIRED),替换为以下代码:
# 替换为项目内libhydrogen头文件的实际存放目录 find_path(LIBHYDROGEN_INCLUDE_DIR NAMES hydrogen.h PATHS "${PROJECT_SOURCE_DIR}/thirdparty/libhydrogen/include" REQUIRED ) # 替换为项目内libhydrogen库文件的实际存放目录 find_library(LIBHYDROGEN_LIBRARY NAMES hydrogen PATHS "${PROJECT_SOURCE_DIR}/thirdparty/libhydrogen/lib" REQUIRED ) # 创建导入目标,保持与原有target_link_libraries的兼容性 add_library(hydrogen::hydrogen STATIC IMPORTED) set_target_properties(hydrogen::hydrogen PROPERTIES IMPORTED_LOCATION "${LIBHYDROGEN_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LIBHYDROGEN_INCLUDE_DIR}" )
- 原有
target_link_libraries中的hydrogen::hydrogen无需修改,可继续使用。
方式三:直接引入libhydrogen源码作为子模块
如果项目内存放的是libhydrogen的源码(例如通过Git子模块引入),直接让CMake编译源码:
- 在原
find_package位置添加:
# 替换为项目内libhydrogen源码的根目录 add_subdirectory("${PROJECT_SOURCE_DIR}/thirdparty/libhydrogen")
- 删除原有的
find_package(libhydrogen CONFIG REQUIRED),target_link_libraries中的hydrogen::hydrogen可正常使用。
注意事项
- 所有示例路径中的
thirdparty/libhydrogen需替换为你项目内libhydrogen的实际存放路径。 - 若使用动态库(
.so),需确保程序运行时能找到该库,可通过设置CMAKE_INSTALL_RPATH或运行时环境变量实现。
内容的提问来源于stack exchange,提问作者Raiane Dev
相关产品推荐
相关产品推荐

