Windows10下CMake编译C++项目找不到Boost date_time组件问题
问题排查解决步骤
1. 优先修复CMP0074策略警告
你设置的cmake_minimum_required(VERSION 2.8.9)版本过低,CMP0074策略是CMake 3.12版本新增的,用于支持find_package识别BOOST_ROOT变量,导致搜索路径异常。
修复方案二选一:
- 把CMake最低版本要求提升到3.12及以上:
cmake_minimum_required(VERSION 3.12) - 显式开启CMP0074策略,在
project指令前添加:
cmake_policy(SET CMP0074 NEW)
2. 确认Boost编译产物和配置项匹配
你设置了Boost_USE_STATIC_LIBS OFF、Boost_USE_MULTITHREADED ON、Boost_USE_STATIC_RUNTIME OFF,需要确保你本地编译的Boost库完全匹配这些配置:
- 检查
C:\boost_1_76_0\stage\lib路径下是否存在date_time的动态库导入文件,文件名格式类似boost_date_time-vc142-mt-x64-1_76.lib(对应动态库版本,静态库文件名会带s后缀) - 确认编译Boost时使用的架构(x86/x64)、运行时类型(动态MT/静态MTd)和你当前CMake生成目标的配置完全一致,架构不匹配会直接导致组件查找失败
- date_time是需要单独编译的非头文件-only组件,如果你没有提前编译Boost二进制组件,直接下载的源码包不会自带预编译产物,要先执行Boost的编译脚本生成对应库文件。
3. 修正CMakeLists.txt的错误写法
你当前的CMake配置存在两处语法错误,也会导致后续链接异常:
find_package(Boost)返回的正确变量是Boost_INCLUDE_DIRS(头文件路径)和Boost_LIBRARIES(库文件列表),不是你用的BOOST_INCLUDEDIR、BOOST_LIBRARYDIRtarget_link_libraries不能直接传入库目录,要传入库变量,同时你的hello目标没有关联Boost配置,正确写法参考:
if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) add_executable(hello hello.cpp) target_link_libraries(hello ${Boost_LIBRARIES}) endif()
4. 辅助排查手段
你已经开启了Boost_DEBUG,可以在输出日志中查找以下信息:
- CMake搜索date_time库的实际路径是否包含你配置的
C:\boost_1_76_0\stage\lib - CMake查找的库文件名和你实际存在的库文件名是否一致,可根据文件名差异调整
Boost_USE_*相关配置 - 确认修改配置后删除生成的
CMakeCache.txt文件再重新执行cmake .,避免缓存干扰。
内容的提问来源于stack exchange,提问作者Jan Muhammad
相关产品推荐
相关产品推荐

