这个错误表明 CMake 在尝试测试 C 编译器时失败,具体原因是编译器无法写入输出文件(Permission denied)。以下是详细分析和解决方案:
错误原因分析
-
核心问题:
- 编译器
cl.exe
无法写入testCCompiler.obj
文件 - 错误类型:
Permission denied
(权限被拒绝)
- 编译器
-
深层原因:
- 项目路径权限问题(特别是路径
M:\3-code\VSCode\...
可能位于网络驱动器或加密目录) - 杀毒软件/Windows Defender 阻止了文件写入
- VS2022 编译器套件未完全安装或损坏
- 中文路径或特殊字符导致权限异常
- 项目路径权限问题(特别是路径
解决方案
方案1:修改项目路径权限
- 将项目移至 非网络驱动器 和 非加密目录(推荐
C:\
或D:\
的本地路径):: 示例:移动到C盘 move "M:\3-code\VSCode\pcl-master" "C:\projects\pcl-master"
- 确保项目路径:
- 不包含中文/特殊字符
- 用户有完全控制权限(右键文件夹 → 属性 → 安全 → 编辑权限)
方案2:关闭安全软件临时保护
- 临时禁用杀毒软件(如360、火绒等)
- 暂停 Windows Defender 实时保护:
- Win + S 搜索 “病毒和威胁防护” → 管理设置 → 关闭实时保护
方案3:重新安装编译器组件
- 打开 Visual Studio Installer
- 修改 VS2022 → 勾选:
- “使用C++的桌面开发”
- 确保安装的MSVC版本与错误中的版本一致(14.35.32215)
方案4:强制清理CMake缓存
- 删除所有构建目录:
rmdir /s /q "M:\3-code\VSCode\pcl-master\people\out"
- 重新生成项目:
cmake -S . -B build -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Debug
方案5:更换生成器(紧急方案)
如果问题持续,尝试改用Ninja生成器:
:: 先安装Ninja
choco install ninja -y
:: 重新配置
cmake -S . -B build -G Ninja
cmake --build build
预防措施
-
路径规范:
- 始终使用 纯英文路径(如
C:\dev\project
) - 避免网络驱动器(如
M:\
)
- 始终使用 纯英文路径(如
-
环境检查:
- 定期运行
vcvarsall.bat
初始化环境:call "D:\Soft\WorkSoft\VS2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
- 定期运行
-
权限控制:
- 以管理员身份运行VS2022(右键 → 以管理员身份运行)
附加调试技巧
如果仍失败,可通过以下命令获取更详细日志:
cmake -S . -B build --trace-expand > cmake_log.txt 2>&1
检查日志中的文件操作失败点。
通过以上步骤,90%的权限类CMake错误可被解决。如果问题依旧,可能是系统级权限问题,建议在干净的本地目录中重建项目。