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

如何向CMake CPack NSIS Windows安装包添加含超260字符长路径文件的目录

CPack NSIS打包长路径报错修复方案

问题本质

Windows默认对Win32路径有260字符长度限制,CPack生成NSIS安装包时,会先把待安装文件拷贝到build目录下层级很深的_CPack_Packages/win64/NSIS/临时目录,临时目录前缀+待打包文件的相对路径总长度很容易突破260字符阈值,触发NSIS failed opening file报错。

可落地方案(按优先级排序)

  • 方案1:配置短路径临时打包目录(优先使用,无额外依赖)
    在CMake配置中添加如下参数,指定NSIS打包时用磁盘根目录下的短路径作为临时暂存目录,从根源上缩短路径总长度:
    # 路径可自定义,保证层级浅、无空格、总长度短即可
    set(CPACK_NSIS_STAGING_PREFIX "C:/cpk_tmp")
    
    修改后重新执行CMake配置、再运行cpack -C Release即可,不需要改系统设置、不需要升级工具,90%以上的场景可以直接解决问题。
  • 方案2:开启NSIS+系统长路径支持
    如果待打包文件本身的相对层级就极深,改短临时路径后总长度还是超限,可以升级NSIS到3.08及以上版本,同时完成两项配置:
    1. 在Windows系统开启长路径支持:打开本地组策略编辑器,依次进入「计算机配置-管理模板-系统-文件系统」,将「启用Win32长路径」设置为已启用,重启系统生效。
    2. 在CMake配置中添加NSIS长路径启用参数:
      set(CPACK_NSIS_DEFINES "!define LONG_PATHS_ENABLE 1")
      
  • 方案3:调整安装路径规则
    如果CI/生产环境没法改系统设置、也没法升级NSIS,可以直接调整install指令的目标路径,减少目录层级;或者提前把深层级的目录打包成压缩包,在安装阶段执行解压逻辑,从根源上降低单条路径的长度。

避坑提示:不要靠手动把build目录挪到短路径的方式临时解决,换构建环境、CI工作目录路径变化后问题会复现,一定要把配置固化到CMake脚本里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:06:26