如何通过find_package在CMake中添加dlib?配置失败求助
解决CMake无法定位dlib库的问题
看起来你在配置dlib库时遇到了CMake查找失败的问题,我来帮你一步步解决这个问题。
首先要明确一个核心点:CMake的find_package(dlib REQUIRED)必须找到dlibConfig.cmake或dlib-config.cmake文件才能正常工作,你之前设置的路径错误正是因为没指向这个配置文件所在的目录。下面是具体的修复步骤:
步骤1:先正确编译dlib库
dlib不能直接用源码目录让CMake查找,必须先编译生成对应的库文件和CMake配置文件:
- 打开cmake-gui,设置dlib的源码目录为
C:/dlib-19.13,再指定一个独立的build目录(比如C:/dlib-19.13/build) - 点击「Configure」,选择你正在使用的MSVC版本(对应Boost用的
14.0,也就是VS2015) - 若需要动态库,可勾选
BUILD_SHARED_LIBS选项;默认是静态库,直接用也没问题 - 点击「Generate」生成VS工程文件,打开生成的
.sln - 先编译
ALL_BUILD项目,等编译完成后,再编译INSTALL项目(这一步会把dlib的头文件、库文件和CMake配置文件安装到指定位置,默认路径是C:/dlib-19.13/build/install)
步骤2:设置正确的dlib_DIR路径
根据你是否执行了INSTALL步骤,选择对应的路径:
- 如果执行了
INSTALL:dlib_DIR应指向C:/dlib-19.13/build/install/lib/cmake/dlib(这个目录下存放着dlibConfig.cmake) - 如果没执行
INSTALL:直接指向dlib的build根目录C:/dlib-19.13/build(编译完成后,dlibConfig.cmake会生成在这里)
步骤3:修正你的CMakeLists.txt
推荐优先在cmake-gui中手动指定路径(更灵活),如果要写在文件里,正确的写法如下:
project(WolframMachine) cmake_minimum_required(VERSION 3.1) set(CMAKE_CXX_STANDARD 11) set(CMAKE_SUPPRESS_REGENERATION true) include(ExternalProject) # Boost配置 set(Boost_INCLUDE_DIR "C:/boost_1_66_0") set(Boost_LIBRARY_DIR "C:/boost_1_66_0/lib64-msvc-14.0") # OpenCV配置 set(OpenCV_DIR "C:/opencv-3.4.1/build") # dlib配置 - 使用正确的路径 set(dlib_DIR "C:/dlib-19.13/build/install/lib/cmake/dlib") # 或者替换为你的build根目录 find_package(OpenCV COMPONENTS core imgproc highgui aruco optflow plot REQUIRED) find_package(dlib REQUIRED) add_subdirectory(dlibtest)
额外排查点
- 确认dlib版本(19.13)与CMake版本(3.1)兼容:dlib-19.13最低要求CMake 3.0以上,3.1满足要求,但如果仍有问题,可以尝试升级CMake到3.5+版本
- 检查编译dlib时的编译器版本和当前项目的编译器版本是否一致(都是VS2015 MSVC14.0),避免跨编译器的兼容性问题
- 如果还是报错,可以在cmake-gui中打开「Advanced」选项,查看
dlib_DIR的实际指向,确认路径下确实存在dlibConfig.cmake文件
内容的提问来源于stack exchange,提问作者Stepan Yakovenko
相关产品推荐
相关产品推荐

