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

CMake ExternalProject_Add引入CGAL时未下载GMP/MPFR依赖问题

CMake集成CGAL v5.4.1 Windows预编译GMP/MPFR依赖方案

现有通过ExternalProject_Add拉取CGAL v5.4.1源码的逻辑,只会拉取核心代码,不会附带Windows 64位平台需要的GMP、MPFR预编译库,原有代码如下:

ExternalProject_Add(cgal
  GIT_REPOSITORY https://github.com/CGAL/cgal.git
  GIT_TAG v5.4.1
  CMAKE_ARGS
    -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
)

之前尝试单独拉取预编译依赖包时,依赖默认被解压到cgal_dependencies-prefix目录,无法被CGAL的配置逻辑识别,要解决这个问题,只需要指定依赖的解压路径、明确两个外部项目的执行依赖、给CGAL传递依赖路径参数即可,完整实现代码如下:

# 拉取Windows平台预编译GMP、MPFR依赖
ExternalProject_Add(cgal_dependencies
  URL https://github.com/CGAL/cgal/releases/download/v5.4.1/CGAL-5.4.1-win64-auxiliary-libraries-gmp-mpfr.zip
  # 跳过不需要的配置、构建、安装步骤
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
  INSTALL_COMMAND ""
  # 直接将依赖解压到CGAL源码树默认查找依赖的auxiliary/gmp路径下
  SOURCE_DIR ${CMAKE_BINARY_DIR}/cgal-prefix/src/cgal/auxiliary/gmp
)

ExternalProject_Add(cgal
  GIT_REPOSITORY https://github.com/CGAL/cgal.git
  GIT_TAG v5.4.1
  # 强制要求依赖包先解压完成,再启动CGAL的配置流程
  DEPENDS cgal_dependencies
  CMAKE_ARGS
    -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
    # 显式指定GMP、MPFR的头文件和库文件路径,避免查找失败
    -DWITH_GMP:BOOL=ON
    -DGMP_INCLUDE_DIR:PATH=${CMAKE_BINARY_DIR}/cgal-prefix/src/cgal/auxiliary/gmp/include
    -DGMP_LIBRARIES:FILEPATH=${CMAKE_BINARY_DIR}/cgal-prefix/src/cgal/auxiliary/gmp/lib/libgmp-10.lib
    -DMPFR_INCLUDE_DIR:PATH=${CMAKE_BINARY_DIR}/cgal-prefix/src/cgal/auxiliary/gmp/include
    -DMPFR_LIBRARIES:FILEPATH=${CMAKE_BINARY_DIR}/cgal-prefix/src/cgal/auxiliary/gmp/lib/libmpfr-4.lib
)

关键说明

  • 把依赖包的SOURCE_DIR指定到CGAL源码下的auxiliary/gmp路径,是因为CGAL自带的CMake配置脚本默认会在该位置查找Windows平台的预编译依赖,解压后文件结构完全匹配查找规则,不需要额外移动文件。
  • DEPENDS cgal_dependencies参数保证了构建顺序:先完成依赖包的下载解压,再拉取、配置CGAL,避免配置阶段找不到依赖报错。
  • 如果需要把依赖存放到自定义路径,不需要放在CGAL源码目录下,只要对应修改四个路径参数,指向你实际存放GMP/MPFR头文件、库文件的位置即可。

内容的提问来源于stack exchange,提问作者PetrasVestartasEPFL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:21:34