You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已有Eigen的CMake项目集成PMP库的报错解决问询

PMP复用现有Eigen及路径/平台问题处理

一、让PMP复用现有Eigen的正确CMake配置

核心思路是禁止PMP自动下载/查找Eigen,强制它使用项目中已有的版本:

  1. 先确保项目中已正确导入Eigen(替换为你项目实际的引入方式,比如find_package或本地CPM配置):
    # 示例:用系统包管理器或本地已安装的Eigen
    find_package(Eigen3 REQUIRED NO_MODULE)
    
  2. 引入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的路径
    )
    
  3. 关键注意:不要重复用CPM引入Eigen,彻底删除之前重复添加的CPMAddPackage(Eigen ...)代码,避免目标冲突。

二、解决路径中Eigen重复的问题

路径重复是因为Eigen的头文件路径被多次添加,处理步骤:

  • 检查CMakeLists.txt,删除重复的include_directories(${EIGEN3_INCLUDE_DIR})或target_include_directories配置。
  • 若PMP仍自动添加重复路径,可在引入PMP前添加:
    set(CMAKE_DISABLE_FIND_PACKAGE_Eigen3 ON)
    
    强制PMP跳过自身的Eigen查找流程。
  • 可通过以下命令排查当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:30:13