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
相关产品推荐
相关产品推荐

