CMake 的最大路径长度

adr*_*min 4 windows path cmake

我有一个使用 CMake 的项目,并在 Windows 上的一组深度嵌套的目录中构建,通常会由于路径长度过长而失败。

基于这个答案 - How to set the Maximum Path Length with CMAKE? - (以及下面@Tsyvarev 的评论 - CMake 的最大路径长度- 我将其放在项目根目录中的 CMakeLists.txt 中并靠近​​文件顶部(即在任何其他处理之前):

set(CMAKE_OBJECT_PATH_MAX 250)
set(CMAKE_OBJECT_NAME_MAX 245)
Run Code Online (Sandbox Code Playgroud)

(由于构建始终在 Windows 上进行,因此我没有在之前问题的答案中考虑 Unix 测试。)

然而,它仍然失败。

我有其他机制来缩短路径长度,所以我知道这是这里的问题 - 但我正在寻找一般建议,向用户提供有关如何设置 CMake 构建以确保他们避免此问题的建议 - 我的理解是CMake 将使用哈希方案来避免长路径名,但这似乎没有发生。

那么这样的机制是否存在,如果存在我该如何访问它呢?

Ale*_*ing 9

您可以使用 CMake 设置路径长度限制CMAKE_OBJECT_PATH_MAX,例如:

if (WIN32)
  set(CMAKE_OBJECT_PATH_MAX 260)
endif ()
Run Code Online (Sandbox Code Playgroud)

但实际上,如果您有能力这样做,您应该通过 PowerShell 命令删除路径长度限制(从 Windows 10 v1607 开始):

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
Run Code Online (Sandbox Code Playgroud)

请参阅:https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation? tabs=powershell