如何在CMake项目中使用libuiohook库?
解决libuiohook在CMake项目中找不到的问题
一、核心问题原因
你将libuiohook安装到了自定义路径../dist,但CMake默认不会搜索这类非系统路径,因此需要明确告知CMake库的具体位置。
二、正确的CMake配置方案
方案1:利用CMake配置文件(优先推荐)
libuiohook安装后会生成uiohookConfig.cmake等配置文件,直接通过find_package配合路径指定即可:
假设你的项目结构如下:
- my_project/ - src/ - main.c - CMakeLists.txt - libuiohook/ - dist/ # 你的库安装目录
编写CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.10) project(my_uiohook_demo C) # 替换成你实际的libuiohook/dist绝对路径,避免相对路径的不确定性 set(LIBUIOHOOK_INSTALL_DIR "/home/xxx/libuiohook/dist") # 将库安装目录加入CMake的搜索路径列表 list(APPEND CMAKE_PREFIX_PATH ${LIBUIOHOOK_INSTALL_DIR}) # 查找uiohook库,REQUIRED表示找不到则直接报错 find_package(uiohook REQUIRED) # 添加可执行文件 add_executable(demo src/main.c) # 链接uiohook库,uiohook::uiohook是CMake配置文件提供的预定义目标 target_link_libraries(demo PRIVATE uiohook::uiohook)
方案2:手动指定头文件和库路径(备用)
如果find_package仍有问题,可直接手动指定路径:
cmake_minimum_required(VERSION 3.10) project(my_uiohook_demo C) set(LIBUIOHOOK_INSTALL_DIR "/home/xxx/libuiohook/dist") # 添加头文件搜索路径 include_directories(${LIBUIOHOOK_INSTALL_DIR}/include) # 查找动态库文件 find_library(UIOHOOK_LIB uiohook PATHS ${LIBUIOHOOK_INSTALL_DIR}/lib) add_executable(demo src/main.c) # 链接找到的库文件 target_link_libraries(demo PRIVATE ${UIOHOOK_LIB})
三、编译与运行注意事项
- 编译时动态指定路径(可选):如果不想在CMakeLists里写死路径,可在编译时通过命令行传入:
mkdir build && cd build cmake .. -DCMAKE_PREFIX_PATH=/home/xxx/libuiohook/dist cmake --build .
- 运行时动态库加载:
- Linux:运行前需指定动态库路径:
export LD_LIBRARY_PATH=/home/xxx/libuiohook/dist/lib:$LD_LIBRARY_PATH ./demo - macOS:替换为
DYLD_LIBRARY_PATH - Windows:将
dist/bin下的dll文件复制到可执行文件同目录,或添加到系统PATH环境变量
- Linux:运行前需指定动态库路径:
四、C++与构建工具学习资源推荐
书籍
- 《CMake实战》:入门友好,通过实际案例讲解CMake常用语法和项目配置技巧
- 《C++ Primer》:经典C++入门教材,覆盖核心语法、标准库,适合系统打基础
- 《Effective C++》:进阶必备,讲解C++编程的最佳实践,帮你写出高效安全的代码
- 《Mastering CMake》:CMake官方权威书籍,深入讲解高级特性与大型工程实践
视频
- B站「CMake从入门到精通」系列:零基础入门,用实际项目演示CMake的常见用法
- 极客时间「现代C编程实战」:系统讲解现代C特性,包含构建工具的工程化实践
- YouTube「CMake Tutorial」系列(英文):内容细致全面,从基础到高级的系统讲解
内容的提问来源于stack exchange,提问作者user17914190
相关产品推荐
相关产品推荐

