已有Eigen的CMake项目集成PMP库的报错解决问询
PMP复用现有Eigen及路径/平台问题处理
一、让PMP复用现有Eigen的正确CMake配置
核心思路是禁止PMP自动下载/查找Eigen,强制它使用项目中已有的版本:
- 先确保项目中已正确导入Eigen(替换为你项目实际的引入方式,比如
find_package或本地CPM配置):# 示例:用系统包管理器或本地已安装的Eigen find_package(Eigen3 REQUIRED NO_MODULE) - 引入PMP时,通过配置选项指定使用现有Eigen:
CPMFindPackage( NAME PolygonMeshProcessing GIT_REPOSITORY https://github.com/pmp-library/pmp-library.git GIT_TAG v1.2.0 # 替换为你需要的版本 OPTIONS "PMP_BUILD_EXAMPLES OFF" # 关闭不必要的构建目标 "PMP_BUILD_TESTS OFF" "PMP_USE_EIGEN3 ON" "EIGEN3_INCLUDE_DIR ${EIGEN3_INCLUDE_DIR}" # 直接传递现有Eigen的路径 ) - 关键注意:不要重复用CPM引入Eigen,彻底删除之前重复添加的
CPMAddPackage(Eigen ...)代码,避免目标冲突。
二、解决路径中Eigen重复的问题
路径重复是因为Eigen的头文件路径被多次添加,处理步骤:
- 检查CMakeLists.txt,删除重复的
include_directories(${EIGEN3_INCLUDE_DIR})或target_include_directories配置。 - 若PMP仍自动添加重复路径,可在引入PMP前添加:
强制PMP跳过自身的Eigen查找流程。set(CMAKE_DISABLE_FIND_PACKAGE_Eigen3 ON) - 可通过以下命令排查当前include路径,确认重复项:
get_property(ALL_INCLUDES DIRECTORY PROPERTY INCLUDE_DIRECTORIES) message(STATUS "Current include directories: ${ALL_INCLUDES}")
三、处理“Using Win32 for window creation”提示
这个提示是CMake的正常输出,不代表构建32位程序:
- Win32在这里指Windows API的通用名称,和平台位数无关。
- 确保构建64位目标的方法:
- 命令行生成项目时,指定架构:
cmake .. -G "Visual Studio 17 2022" -A x64(替换为你的VS版本)。 - CMake GUI中,选择对应版本的VS Generator并勾选“x64”平台。
- 检查CMakeCache.txt中的
CMAKE_GENERATOR_PLATFORM值是否为x64。
- 命令行生成项目时,指定架构:
四、是否需要更换库?
如果PMP的配置始终有问题,可考虑替代轻量网格库:
- Libigl:完全基于Eigen,API简洁,专注于网格处理,集成成本低。
- OpenMesh:独立于Eigen(可选支持Eigen),体积小巧,文档完善。
- MeshLabLib:功能全面,但比前两者稍重,适合复杂网格场景。
优先建议解决PMP的配置问题,因为它和Eigen的适配性更好,且体积符合你的轻量化需求。
内容的提问来源于stack exchange,提问作者skrat
相关产品推荐
相关产品推荐

