【问题标题】:Maximum path lengths with CMakeCMake 的最大路径长度
【发布时间】:2021-09-21 21:02:24
【问题描述】:

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

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

set(CMAKE_OBJECT_PATH_MAX 250)
set(CMAKE_OBJECT_NAME_MAX 245)

(由于构建始终在 Windows 上,因此在前面问题的答案中我没有打扰 Unix 测试。)

但是还是失败了。

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

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

【问题讨论】:

  • 变量的正确名称是CMAKE_OBJECT_PATH_MAX,带有CMAKE_前缀。
  • 谢谢你 - 但不幸的是仍然没有像我预期的那样工作

标签: windows cmake path


【解决方案1】:

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

if (WIN32)
  set(CMAKE_OBJECT_PATH_MAX 260)
endif ()

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

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

见:https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell

【讨论】:

  • 但是设置限制有什么用呢?
  • 它缩短了 CMake 生成的目标文件路径名的长度。如果基本二进制目录加上目标的输出名称对于您的文件系统来说太长,那只是一个糟糕的配置。 Docs。在某些情况下,设置 CMAKE_*_OUTPUT_DIRECTORY 也会有所帮助,只要不存在名称冲突。 Docs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2019-08-07
  • 2011-12-22
相关资源
最近更新 更多