CMake ExternalProject_Add prefix目录作用及相关参数区别咨询
cgal_dependencies-prefix文件夹的作用与生成原因 这个目录是CMake ExternalProject_Add 命令的默认生成产物,属于外部项目的专属工作前缀目录,只要调用该命令添加外部项目,CMake就会自动在构建目录下创建命名格式为<外部项目名>-prefix的文件夹,和用户自定义的源码、安装路径设置无关。
全流程执行外部项目构建时,这个目录会存放下载缓存、步骤执行戳记、构建日志、临时安装脚本、中间状态文件。当前配置里把CONFIGURE_COMMAND、BUILD_COMMAND、INSTALL_COMMAND全部设为空,跳过了配置、编译、安装全流程,同时直接把SOURCE_DIR指向了最终存放依赖的build/install/cgal_dependencies路径,所以这个目录下不会生成源码、构建缓存这类大体积内容,仅剩下记录外部项目步骤状态的.cmake文件——这类文件主要是标记下载、校验等步骤的完成状态,避免CMake重复执行下载操作,属于完全正常的现象,不会影响依赖的正常使用。
当前使用的ExternalProject配置如下:
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 CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} #-DCMAKE_INSTALL_PREFIX:PATH="${CMAKE_BINARY_DIR}/install" SOURCE_DIR "${CMAKE_BINARY_DIR}/install/cgal_dependencies" #INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/install" CONFIGURE_COMMAND "" # 跳过配置步骤 BUILD_COMMAND "" # 跳过编译步骤 INSTALL_COMMAND "" # 暂不配置安装命令 )
对应目录结构参考:
ExternalProject_Add三个相关参数的核心区别 SOURCE_DIR
该参数指定外部项目源码的存放/解压根目录。ExternalProject默认执行流程中,下载的源码包会直接解压到这个路径下,后续配置、编译命令的默认工作目录都基于该路径设置。当前配置直接把该路径设为最终的依赖存放目录,相当于把解压后的预编译依赖直接放到目标位置,因此不需要额外执行编译、安装步骤。INSTALL_DIR
这是ExternalProject_Add提供的内置路径占位变量,本身不会直接修改外部项目的任何行为,只有在自定义的安装命令、配置参数中手动引用${INSTALL_DIR}变量时,设置的路径值才会被传递到对应命令里。如果不主动引用,哪怕配置了该参数也不会产生任何实际效果。CMAKE_ARGS传入的-DCMAKE_INSTALL_PREFIX:PATH
这是真正传递给外部项目自身CMake构建流程的参数,作用是告诉外部项目的CMake构建系统,执行安装命令时将编译产物、头文件等安装到指定前缀路径。该参数仅在未跳过配置步骤、且外部项目本身使用CMake作为构建系统时才会生效,当前配置把CONFIGURE_COMMAND设为空,即使取消该参数的注释也不会起作用。
内容的提问来源于stack exchange,提问作者PetrasVestartasEPFL
相关产品推荐
相关产品推荐

