如何解决Windows系统下cl.exe无法识别长路径的问题
原因说明
你当前使用的19.28版本MSVC编译器(对应Visual Studio 2019)本身不原生支持长路径,即便系统层面开启了长路径支持,cl.exe内部的路径解析逻辑仍会限制最大路径长度为260字符,手动加\\?\前缀也会被编译器的路径规范化逻辑过滤,因此无法生效。
可行解决方案
- 方案1:升级编译器版本
升级到Visual Studio 2022 17.0及以上版本,对应cl.exe版本号≥19.30,该版本开始原生适配Windows长路径策略,只要系统已开启注册表和组策略的长路径配置即可直接正常编译长路径下的源文件。 - 方案2:用subst映射盘符缩短路径
把长路径前缀映射为单独盘符,操作命令如下:# 映射路径到Z盘 subst Z: "C:\ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongFolderName\SomeReallyReallyReallyLongSubfolderName" # 切换到Z盘编译 Z: cl main.cpp # 用完删除映射 subst Z: /d - 方案3:创建目录软链接缩短路径
在路径较短的目录下创建指向长路径的软链接,操作命令如下:# 在C盘根目录创建软链接 mklink /d C:\build_link "C:\ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongFolderName\SomeReallyReallyReallyLongSubfolderName" # 切换到软链接目录编译 cd C:\build_link cl main.cpp - 方案4:使用构建工具中转
如果使用CMake、MSBuild等构建工具,可将构建工作目录设置在路径较短的位置,配置构建规则自动把源文件拷贝到工作目录编译,避免直接操作长路径下的文件。
内容的提问来源于stack exchange,提问作者Fooble
相关产品推荐
相关产品推荐

