Windows 如何在cmd.exe中处理长路径

Windows 如何在cmd.exe中处理长路径,windows,docker,path,Windows,Docker,Path,我正在帮助一些开发人员创建Linux项目的Windows端口,其中源代码树非常深,总路径长度远远超过260个字符。至少现在,所需要的只是运行gcc编译。源代码树为Linux/Windows共享,并可对外维护;修改树结构或更改文件名(例如,更改为符号链接,或使用subst挂载子树)不是可行的替代方案 更复杂的是:构建将在Windows风格的Docker容器中进行。因此,解决方案仅限于可以在Windows docker基础映像上运行的解决方案 我已经将HKLM\SYSTEM\CurrentContr

我正在帮助一些开发人员创建Linux项目的Windows端口,其中源代码树非常深,总路径长度远远超过260个字符。至少现在,所需要的只是运行gcc编译。源代码树为Linux/Windows共享,并可对外维护;修改树结构或更改文件名(例如,更改为符号链接,或使用subst挂载子树)不是可行的替代方案

更复杂的是:构建将在Windows风格的Docker容器中进行。因此,解决方案仅限于可以在Windows docker基础映像上运行的解决方案

我已经将HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled值设置为1,并且我假设如果我创建自己的应用程序,我可以提供一个带有true的应用程序清单。但我不是在创建gcc,所以我如何告诉cmd.exe gcc不限于260个字符的路径长度?(仅设置注册表变量本身是不够的!)


从cmd.exe运行gcc是否需要cmd.exe能够处理长PAHT?是否可以?我可以使用另一个可以处理长路径(并且不受任何底层cmd.exe限制)的shell吗?

为什么不完全避免cmd.exe? 只需使用MSYS2 shell()

这解决了许多移植问题,事实上允许您使用相同的构建工具(autoconf,甚至cmake和meson)


我在Windows上使用这个环境已经很多年了。事实上,我完全是这样构建了最新的GCC和MinGW-w64(请参阅:).

CMD在Windows 10中为其自己的工作目录和内部命令的参数支持长DOS路径。但是,Windows不允许子进程的继承工作目录超过
MAX_PATH-2
,无论是否启用长路径。对于所有其他情况,支持长DOS路径取决于每个进程,即gcc.exe在这种情况下。如果它不支持长DOS路径,它可能支持作为非规范化设备路径的长路径,即仅使用反斜杠(至少在WINAPI中)且以“\\?\”本地设备对象目录开头的完全限定的Unicode路径。