Windows环境下CMake创建空文件而非目录的异常问题咨询
CMake Windows生成阶段目录误创建为空文件问题说明
常见触发原因
- CMake版本兼容问题:3.20到3.22区间的部分Windows版CMake存在路径解析缺陷,当目标目录路径包含中文、空格、连续特殊符号,或是路径长度接近Windows默认260字符上限时,
file(MAKE_DIRECTORY)指令会误将目录创建为空文件。 - 第三方工具锁冲突:如果异常设备开启了杀毒软件实时扫描、云盘文件同步功能,CMake发起目录创建请求时,对应路径被第三方工具临时锁定,CMake无法正确识别路径类型,会生成空文件占位。
- 项目CMake逻辑时序问题:检查项目中创建该目录的相关代码,若存在先向同路径写入临时文件、后续才创建目录的逻辑,Windows环境下文件删除操作存在毫秒级延迟,临时文件未完全清理时,目录创建会失败并保留原有空文件。
修复方案
- 临时验证方案:升级异常设备CMake到最新稳定版,运行
reg add HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f开启长路径支持后重启设备,关闭杀毒软件、云同步功能后重新生成,确认是否复现问题。 - 永久修复方案:在项目创建目标目录的逻辑前增加冲突处理代码,避免手动操作:
# 处理同路径存在空文件的冲突 set(TARGET_DIR "替换为你的目标目录路径变量") if(EXISTS ${TARGET_DIR} AND NOT IS_DIRECTORY ${TARGET_DIR}) file(REMOVE ${TARGET_DIR}) endif() file(MAKE_DIRECTORY ${TARGET_DIR})
内容的提问来源于stack exchange,提问作者tooEarlyToGetUp
相关产品推荐
相关产品推荐

