CMake 在生成 Makefile 时生成的路径名太长

Posted

技术标签:

【中文标题】CMake 在生成 Makefile 时生成的路径名太长【英文标题】:CMake generates too long pathnames on Makefile generation 【发布时间】:2012-04-25 16:18:37 【问题描述】:

当前项目的结构非常复杂(我无法更改)并且它使用 CMake。 但是我很难创建一个可以编译的 Makefile。

主要问题是:如果我的项目存储在 D:\a\b\c\ 中,D:\a\b\c\src\d\e 中的一些源和 D:\a\b\c\build 中的构建文件夹,cmake 会创建一些文件夹,如 D:\a\b\c\build\SubProjectName\CMakeFiles\DetailedSubPrjectName.dir\D_\a\b\c\src\d\e。我想你明白了——结果路径恰好超过 260 个字符。

我无法展平项目结构(不是我的代码)。完成这项工作的唯一方法是将整个项目放在文件夹结构中更高的位置 - (非常)靠近驱动器根目录(我有大约 10-15 个字符可用)。但这不是真的可以接受,有时需要更多的字符。

有什么方法可以说服 CMake 在构建目录中创建平面结构或使用更长的路径名(在 WinXP 中)?还是有其他想法?

【问题讨论】:

【参考方案1】:

您可以尝试使用CMAKE_USE_RELATIVE_PATHS 稍微缩短您的路径,但显然它有不起作用的记录……

无论如何,问题来自 Windows 而不是 CMake,您最好尝试增加系统上的最大路径长度。很遗憾,我在这里帮不了你。

但是,CMake 可能应该知道 Windows XP 上的路径长度限制,所以我建议您 file a bug,以便 CMake 开发人员可以做一些事情。

【讨论】:

如果我使用 CMAKE_USE_RELATIVE_PATHS,问题仍然存在。我当前的解决方案是使用临时目录(如 c:\tmp\build)并添加构建后副本。不是我猜的最好的解决方案,但我能想到的唯一一个。【参考方案2】:

绕过这个问题的最好方法是使用subst b: c:\my\long\source\dir,然后在新的 B: 驱动器上工作。 您还必须清除构建目录。

【讨论】:

以上是关于CMake 在生成 Makefile 时生成的路径名太长的主要内容,如果未能解决你的问题,请参考以下文章

cmake中的奇怪字符“â”生成makefile错误

qt打开cmake工程keyvalue不显示

cmake 文件结构

为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?

CMake:生成忽略错误的 Unix Makefile

cmake利用toolchain.cmake生成makefile之后,make生成静态库失败问题