Windows+VS2019编译CGAL示例时无法找到Boost program_options组件求助
解决Windows下VS2019编译CGAL示例时Boost Program Options组件找不到的问题
问题描述
在Windows系统使用VS2019编译CGAL的Ridges_3_Examples示例程序时,出现错误:
Could NOT find Boost: missing: program_options (已找到F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0/BoostConfig.cmake,版本为1.81.0)
NOTICE: 本项目需要Boost Program Options组件,将无法编译。
项目CMake脚本如下:
# 这是用于编译CGAL应用程序的CMake脚本 cmake_minimum_required(VERSION 3.1...3.23) project(Ridges_3_Examples) find_package(CGAL REQUIRED) find_package(Eigen3 3.1.0 QUIET) #(要求版本3.1.0或更高) include(CGAL_Eigen3_support) if(TARGET CGAL::Eigen3_support) # 链接Boost.ProgramOptions(可选) find_package(Boost COMPONENTS program_options) if(Boost_PROGRAM_OPTIONS_FOUND) create_single_source_cgal_program(Compute_Ridges_Umbilics.cpp) target_link_libraries(Compute_Ridges_Umbilics PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program(Ridges_Umbilics_SM.cpp) target_link_libraries(Ridges_Umbilics_SM PUBLIC CGAL::Eigen3_support) create_single_source_cgal_program(Ridges_Umbilics_LCC.cpp) target_link_libraries(Ridges_Umbilics_LCC PUBLIC CGAL::Eigen3_support) add_definitions("-DCGAL_USE_BOOST_PROGRAM_OPTIONS") if(TARGET Boost::program_options) target_link_libraries(Compute_Ridges_Umbilics PRIVATE Boost::program_options) target_link_libraries(Ridges_Umbilics_SM PRIVATE Boost::program_options) target_link_libraries(Ridges_Umbilics_LCC PRIVATE Boost::program_options) else() target_link_libraries(Compute_Ridges_Umbilics PRIVATE ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(Ridges_Umbilics_SM PRIVATE ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_link_libraries(Ridges_Umbilics_LCC PRIVATE ${Boost_PROGRAM_OPTIONS_LIBRARY}) endif() else() message("NOTICE: 本项目需要Boost Program Options组件,将无法编译。") endif() else() message("NOTICE: 本项目需要Eigen 3.1(或更高版本),将无法编译。") endif()
启用set(Boost_DEBUG ON)后的调试输出显示,CMake已找到Boost 1.81.0的配置文件,也定位到了boost_program_options的CMake配置目录,但扫描库文件时所有库项都标记为空([ ]),最终判定找不到该组件:
正在选择Windows SDK版本10.0.16299.0以适配Windows 10.0.22000。 C编译器标识为MSVC 19.29.30145.0 CXX编译器标识为MSVC 19.29.30145.0 检测C编译器ABI信息 检测C编译器ABI信息 - 完成 检查可用的C编译器:C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - 跳过 检测C编译特性 检测C编译特性 - 完成 检测CXX编译器ABI信息 检测CXX编译器ABI信息 - 完成 检查可用的CXX编译器:C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - 跳过 检测CXX编译特性 检测CXX编译特性 - 完成 未找到Visual Leak Detector (VLD)。 使用仅头文件版本的CGAL 目标为Visual Studio 16 2019 目标构建环境支持自动链接 使用VC工具集142。 生成器使用中间配置目录:$(Configuration) 找到GMP:debug;F:/CGAL-5.5.1/auxiliary/gmp/lib/libgmp-10.lib;optimized;F:/CGAL-5.5.1/auxiliary/gmp/lib/libgmp-10.lib 找到MPFR:F:/CGAL-5.5.1/auxiliary/gmp/lib/libmpfr-4.lib 找到Boost:F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0/BoostConfig.cmake(找到合适版本"1.81.0",最低要求为"1.66") Boost头文件目录:F:/boost_1_81_0/boostmake/include/boost-1_81 Boost库: 执行测试CMAKE_HAVE_LIBC_PTHREAD 执行测试CMAKE_HAVE_LIBC_PTHREAD - 失败 在pthreads中查找pthread_create 在pthreads中查找pthread_create - 未找到 在pthread中查找pthread_create 在pthread中查找pthread_create - 未找到 找到Threads:TRUE 在F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0找到Boost 1.81.0 请求的配置:QUIET COMPONENTS program_options BoostConfig: find_package(boost_headers 1.81.0 EXACT CONFIG QUIET HINTS F:/boost_1_81_0/boostmake/lib/cmake) BoostConfig: find_package(boost_program_options 1.81.0 EXACT CONFIG QUIET HINTS F:/boost_1_81_0/boostmake/lib/cmake) 在F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0找到boost_program_options 1.81.0 Boost工具集为vc142(MSVC 19.29.30145.0) 扫描F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant*.cmake 包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-gd-x32-1_81-static.cmake [ ] libboost_program_options-vc142-mt-gd-x32-1_81.lib 包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-gd-x64-1_81-static.cmake [ ] libboost_program_options-vc142-mt-gd-x64-1_81.lib 包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-x32-1_81-static.cmake [ ] libboost_program_options-vc142-mt-x32-1_81.lib 包含F:/boost_1_81_0/boostmake/lib/cmake/boost_program_options-1.81.0/libboost_program_options-variant-vc142-mt-x64-1_81-static.cmake [ ] libboost_program_options-vc142-mt-x64-1_81.lib 无法找到Boost:缺少program_options组件(已找到F:/boost_1_81_0/boostmake/lib/cmake/Boost-1.81.0/BoostConfig.cmake,版本为"1.81.0") NOTICE: 本项目需要Boost Program Options组件,将无法编译。 配置完成(5.9s)
解决方案
1. 确认Boost是否实际生成了program_options组件
从调试输出看,CMake能找到program_options的配置文件,但库项为空,说明编译Boost时可能未生成该组件的库文件:
- 打开
F:/boost_1_81_0/boostmake/lib目录,检查是否存在libboost_program_options-vc142-mt-gd-x64-1_81.lib、libboost_program_options-vc142-mt-x64-1_81.lib等对应工具集(vc142)、架构(x64/x32)的库文件。 - 若不存在,重新编译Boost:
- 打开VS2019的「x64 Native Tools Command Prompt」(对应目标架构)。
- 切换到Boost根目录,执行
bootstrap.bat生成b2工具。 - 执行编译命令,明确指定编译program_options组件:
(b2 toolset=msvc-14.2 address-model=64 --with-program_options install --prefix=F:/boost_1_81_0/boostmakeaddress-model=64对应x64架构,若编译x32则改为32;toolset=msvc-14.2对应VS2019的工具集)
2. 手动指定Boost库目录和组件类型
如果库文件存在但CMake无法识别,可在CMake脚本中手动配置:
修改CMake中find_package(Boost)的部分:
# 明确使用Boost静态库 set(Boost_USE_STATIC_LIBS ON) # 指定Boost库目录 set(Boost_LIBRARY_DIR F:/boost_1_81_0/boostmake/lib) find_package(Boost COMPONENTS program_options REQUIRED)
3. 检查架构与工具集一致性
VS2019项目的架构和工具集必须与Boost编译版本匹配:
- 右键项目→属性→配置属性→常规,确认「平台工具集」为
v142(对应Boost的vc142工具集)。 - 确认项目架构(x64/x32)与Boost编译的架构一致。
4. 清理CMake缓存后重新配置
删除项目的CMakeCache.txt和CMake生成的中间目录,重新运行CMake配置,避免缓存导致的识别问题。
内容的提问来源于stack exchange,提问作者Zimao
相关产品推荐
相关产品推荐

