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

CMake ExternalProject_Add设置安装前缀后仍用默认目录解决方法

问题原因

你看到的固定路径build/cgal_dependencies-prefix是ExternalProject_Add为外部项目默认生成的工作根目录,用于存放下载的压缩包、解压源码、构建临时文件、流程标记文件,和你配置的CMAKE_INSTALL_PREFIX(外部项目安装路径)是完全独立的两个配置项,所以修改安装路径参数不会改变这个工作目录的位置。
你当前的代码还有两个明显问题:

  • cmake_minimum_required命令必须放在project命令之前,否则会出现缓存变量加载、项目初始化异常
  • 你在CMAKE_ARGS里传入的CMAKE_INSTALL_PREFIX参数是供外部项目自身的CMake构建流程使用的,但你已经把CONFIGURE_COMMAND/BUILD_COMMAND/INSTALL_COMMAND全部设为空,既跳过了外部项目的配置构建流程,也没有定义文件拷贝逻辑,压缩包下载解压后不会自动部署到你指定的安装目录。
修正方案

1. 修改外部项目工作/下载目录

通过ExternalProject_Add的专属参数指定路径:

  • PREFIX <path>:替换默认的xxx-prefix工作根目录
  • DOWNLOAD_DIR <path>:可选,单独指定压缩包的下载存放位置,不设置的话默认会放到PREFIX下的src子目录

2. 配置免编译包的安装逻辑

你下载的是预编译好的CGAL依赖二进制包,不需要cmake配置和编译流程,需要手动写INSTALL_COMMAND把解压后的文件拷贝到目标安装路径。

修正后的完整代码
# 注意:cmake_minimum_required 必须放在project命令前
cmake_minimum_required(VERSION 3.19)
project(superbuild LANGUAGES CXX)

set(
  CMAKE_INSTALL_PREFIX
  "${CMAKE_BINARY_DIR}/install"
  CACHE STRING
  "Final install location."
)

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
  # 自定义工作根目录,替换默认的build/cgal_dependencies-prefix
  PREFIX "${CMAKE_BINARY_DIR}/third_party/cgal_deps_work"
  # 可选:单独指定zip包下载存放目录
  # DOWNLOAD_DIR "${CMAKE_BINARY_DIR}/downloads"
  
  # 免编译包不需要配置、构建步骤
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
  # 安装逻辑:把解压后的所有文件拷贝到安装目录
  INSTALL_COMMAND
    ${CMAKE_COMMAND} -E copy_directory
    "<SOURCE_DIR>"
    "${CMAKE_INSTALL_PREFIX}"
)
参数说明
  • <SOURCE_DIR>是ExternalProject内置变量,指向压缩包解压后的根目录,不需要手动替换
  • 如果你不需要自定义整个工作目录,只是不想让下载的文件散落在默认prefix目录,只加DOWNLOAD_DIR参数指定下载路径即可
  • 如果你就是想把默认的xxx-prefix目录挪位置,只需要设置PREFIX参数为你想要的绝对路径就可以生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:57:16